SSC Juniormester
02. november 2020 - 19:29 Der er 4 kommentarer og
1 løsning

Problemer med 'log in application'

Hej Computerworld,

Jeg sidder med  et problem, som jeg efter et tidsrum ikke endnu har kunne løse:

Jeg her lavet en login-applikation, men hver gang logger ind får jeg "invalid user" (selvom brugeren er eksisternede in min DB)

Koden er herunder

<?php


session_start();



require_once "Auth.php";
require_once "Util.php";





$auth = new Auth();
$db_handle = new DBController();
$util = new Util();

require_once "authCookieSessionValidate.php";

if ($isLoggedIn) {
    $util->redirect("dashboard.php");
}

if (! empty($_POST["login"])) {
    $isAuthenticated = false;
   
    $username = $_POST["user"];
    $password = $_POST["pass"];
   
    $user = $auth->getMemberByUsername($username);
    if (password_verify($password, $user[0]["pass"])) {
        $isAuthenticated = true;
    }
   
    if ($isAuthenticated) {
        $_SESSION["user"] = $user[0]["user"];
       
        // Set Auth Cookies if 'Remember Me' checked
        if (! empty($_POST["remember"])) {
            setcookie("member_login", $username, $cookie_expiration_time);
           
            $random_password = $util->getToken(16);
            setcookie("random_password", $random_password, $cookie_expiration_time);
           
            $random_selector = $util->getToken(32);
            setcookie("random_selector", $random_selector, $cookie_expiration_time);
           
            $random_password_hash = password_hash($random_password, PASSWORD_DEFAULT);
            $random_selector_hash = password_hash($random_selector, PASSWORD_DEFAULT);
           
            $expiry_date = date("Y-m-d H:i:s", $cookie_expiration_time);
           
            // mark existing token as expired
            $userToken = $auth->getTokenByUsername($username, 0);
            if (! empty($userToken[0]["id"])) {
                $auth->markAsExpired($userToken[0]["id"]);
            }
            // Insert new token
            $auth->insertToken($username, $random_password_hash, $random_selector_hash, $expiry_date);
        } else {
            $util->clearAuthCookie();
        }
        $util->redirect("dashboard.php");
    } else {
        $message = "Invalid Login";
    }
}
?>
<style>
body {
    font-family: Arial;
}

#frmLogin {
    padding: 20px 40px 40px 40px;
    background: #d7eeff;
    border: #acd4f1 1px solid;
    color: #333;
    border-radius: 2px;
    width: 300px;
}

.field-group {
    margin-top: 15px;
}

.input-field {
    padding: 12px 10px;
    width: 100%;
    border: #A3C3E7 1px solid;
    border-radius: 2px;
    margin-top: 5px
}

.form-submit-button {
    background: #3a96d6;
    border: 0;
    padding: 10px 0px;
    border-radius: 2px;
    color: #FFF;
    text-transform: uppercase;
    width: 100%;
}

.error-message {
    text-align: center;
    color: #FF0000;
}
</style>

<form action="" method="post" id="frmLogin">
    <div class="error-message"><?php if(isset($message)) { echo $message; } ?></div>
    <div class="field-group">
        <div>
            <label for="login">Username</label>
        </div>
        <div>
            <input name="user" type="text"
                value="<?php if(isset($_COOKIE["member_login"])) { echo $_COOKIE["member_login"]; } ?>"
                class="input-field">
        </div>
    </div>
    <div class="field-group">
        <div>
            <label for="password">Password</label>
        </div>
        <div>
            <input name="pass" type="password"
                value="<?php if(isset($_COOKIE["pass"])) { echo $_COOKIE["pass"]; } ?>"
                class="input-field">
        </div>
    </div>
    <div class="field-group">
        <div>
            <input type="checkbox" name="remember" id="remember"
                <?php if(isset($_COOKIE["member_login"])) { ?> checked
                <?php } ?> /> <label for="remember-me">Remember me</label>
        </div>
    </div>
    <div class="field-group">
        <div>
            <input type="submit" name="login" value="Login"
                class="form-submit-button"></span>
        </div>
    </div>
</form>

Tak for hjælpen på forhånd,

vh SSC
olsensweb.dk Ekspert
02. november 2020 - 20:32 #1
jeg tror det er her det fejler:
if (password_verify($password, $user[0]["pass"])) {
    $isAuthenticated = true;
}


har du prøvet at lave en print_r($user), så du kan se om der står det rigtige i $user[0]
er password hashed i database tabellen ?? (det skal det)
hedder collonnerne det rigtige ??

har du slået debug til, så længe du udvikler ?? hvis ikke gør det
SSC Juniormester
03. november 2020 - 12:11 #2
Ah, tak!

Jeg får meddelen Array ( [0] => Array ( [user] => 11 [pass] => $2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq [email] => 11 [first] => 11 [last] => 11 ) )

(skidt pyt med, at kodeordet vises, jeg sletter brugeren senere)

Jeg tror problemet ligger i, at jeg ikke har nogen id kolonne i min database (fordi jeg har skrevet hele 'projektet' uden kolonnen (tænker der meget arbejde i at implementere kolonnen, hvis jeg skal  ændre alle filerne)

Er det muligt at gøre det uden id-kolonne? (jeg forstår godt problemet, den skriver jo  [0]  til at starte med, så den kan formentligt ikke finde id, derfor går det galt)
olsensweb.dk Ekspert
03. november 2020 - 13:22 #3
>$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq
det burde være password i klar text formindelig rasmuslerdorf

ref https://www.php.net/manual/en/function.password-verify.php
Example #1 password_verify() example
<?php
// See the password_hash() example to see where this came from.
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';

if (password_verify('rasmuslerdorf', $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}
?>


havde forvendtet du loggede ind som user admin og password admin som der står i
https://phppot.com/php/secure-remember-me-for-login-using-php-session-and-cookies/


er det denne tabel og indhold du anvender ??
CREATE TABLE `members` (
  `member_id` int(8) NOT NULL,
  `member_name` varchar(255) CHARACTER SET utf8 NOT NULL,
  `member_password` varchar(64) NOT NULL,
  `member_email` varchar(255) CHARACTER SET utf8 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `members`
--

INSERT INTO `members` (`member_id`, `member_name`, `member_password`, `member_email`) VALUES
(1, 'admin', '$2a$10$0FHEQ5/cplO3eEKillHvh.y009Wsf4WCKvQHsZntLamTUToIBe.fG', 'user@gmail.com');



>(skidt pyt med, at kodeordet vises, jeg sletter brugeren senere)
det skal står hashed i db og indskrivet i formen i klar tesxt

>Er det muligt at gøre det uden id-kolonne?
søg filerne igennem efter menber_id, og se om det bruges.


tag hele projected ned herfra
https://phppot.com/downloads/secure-remember-me-for-login-using-php-session-and-cookies.zip

ret til, og test løbende
jeg ville starte med at omdøbe member_password til pass og rette i sql til det virker igen, så du lærer coden at kende

dette er ikke et begynder project.


læs op på:
https://www.php.net/manual/en/function.password-hash.php
https://www.php.net/manual/en/function.password-verify.php

evt også på: (selvom jeg foretrækker password-hash)
https://www.php.net/manual/en/function.crypt.php
SSC Juniormester
03. november 2020 - 19:38 #4
Hej igen,

Tusind tak for alt det bruge info, så cool!

Jeg prøvede en del forskellige ting (korrekt, jeg bruger https://phppot.com/downloads/secure-remember-me-for-login-using-php-session-and-cookies.zip), men det viser sig, at det er muligt at fjerne id :-)

(Virker nu)

Endnu engang tak fior hjælpen!

God aften,

Vh SSC
olsensweb.dk Ekspert
03. november 2020 - 19:58 #5
>men det viser sig, at det er muligt at fjerne id :-)
er det klogt at fjerne id ??
en bruger kan vel skifte brugernavn/logon navn med tiden !!, men ikke id
med en id får du det også nemmere når du joiner andre tabeller (mere standart code)

hvis du arbejder med framework er der mange der forvendter primær nøgle hedder id

coden bliver nemmere at genbruge og logisk, men det vil du nok se når du laver resten af CRUD, og evt flere tabeller
Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links

Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





Premium
Hammeren er faldet efter flere måneders forberedelse: IBM Danmark har nu sat stort antal medarbejdere på porten
IBM Danmark nu har nu endeligt effektueret masseafskedigelsesrunden, der blev sat i værk sidste år. Selskabet vil dog ikke oplyse, hvor mange ansatte der har modtaget en fyreseddel.
Computerworld
Biden sender skjult besked til kode-folket: "Hvis du læser dette, har vi brug for din hjælp”
En stående invitation er blevet opdaget i kildekoden på Det Hvide Hus' hjemmeside. Men den er kun til de eksperter, der selv kan finde den.
CIO
Podcast: Hos Viking Life-Saving Equipment er it gået fra at være backend til at være noget, som kunderne spørger aktivt efter
Podcast, The Digital Edge: Viking leverer en stadig større del af deres produkt som en tjeneste. Som en del af tjenesten tager Viking ansvar for sikkerheden ved at levere, dokumentere og vedligeholde det nødvendige sikkerhedsudstyr. Hør hvordan Henrik Balslev senior digital director hos Viking har løftet den opgave.
White paper
Kunsten at navigere i en tilpasningsøkonomi
Evnen til at tilpasse sig en verden i konstant forandring bliver afgørende for virksomhedens mulighed for at vækste i fremtiden. Ét af de finansielle håndtag du kan skrue på, er en hel eller delvis outsourcing af it-driften. I e-bogen ”Kunsten at navigere i en tilpasningsøkonomi” får du viden om, hvordan din virksomhed kan bruge tilpasningsøkonomi til at håndtere fremtidens krav til it. Vi spørger blandt andet: - Kan din virksomhed skalere og tilpasse sin digitale kapacitet og økonomi? - Har dine kunder tillid til, at du har de skarpeste it-løsninger? - Ville I kunne styrke forretningen ved at give jeres it mere fokus? - Kan I få øget funktionalitet til samme pris? Vi fokuserer på risiko, økonomi, fokus og valg af it-partner, som er fire opmærksomhedspunkter du skal have styr på for at lykkes med at tilpasse virksomheden til at modstå forandringerne i verden.