Empfehlungen: Erweiterte Suche

Login: Kann den Wert nicht aus dem Passwort-Feld holen

Daten auslesen, verarbeiten und den Views übergeben

Login: Kann den Wert nicht aus dem Passwort-Feld holen

Beitragvon tom.fox » So 20. Jun 2010, 16:11

hallo,

ich habe das problem, dass beim login, dass eingegebene passwort nicht übergeben wird. aber von vorn :)

bei der registrierung wird das angegebene password als md5 in der DB gespeichert:
Code: Alles auswählen

    function register() {
        if (!empty($this->data)) {
            $this->data['User']['password'] = md5($this->data['User']['password']);
            $this->User->create();
            if ($this->User->save($this->data)) {
                $this->Session->write('User', $this->User->findByUsername($this->data['User']['username']));
                $this->Session->setFlash('Thank you for registering.');
                #$this->redirect('/');
           } else {
                $this->Session->setFlash('The User could not be saved. Please, try again.');
            }
        }
    }
 


die view, mein login formular
Code: Alles auswählen

<div class="">
<h2>Login</h2>    
    <?php echo $form->create('User', array('action' => 'login'));?>
        <?php echo $form->input('username');?>
        <?php echo $form->input('password');?>
        <?php echo $form->submit('Login');?>
    <?php echo $form->end(); ?>
</div>
 


jetzt der problem-teil: LOGIN
die login-funktion im controller: es wird auf validateLogin() zugegriffen um zu schaun, ob user/passwort des login-formulars mit der DB übereinstimmen.
Code: Alles auswählen

    function login()
    {
        if(empty($this->data) == false)
        {
            if(($user = $this->User->validateLogin($this->data['User'])) == true)
            {
                $this->Session->write('User', $user);
                $this->Session->setFlash('You\'ve successfully logged in.');
                #$this->redirect('index');
               #exit();
           }
            else
            {
                $this->Session->setFlash('Sorry, the information you\'ve entered is incorrect.');
                #exit();
           }
        }
     }
 


diese funktion ist im model:
Code: Alles auswählen

    function validateLogin($data)
    {
        $user = $this->find(array('username' => $data['username'], 'password' => md5($data['password'])), array('id', 'username'));
        if(empty($user) == false)
            return $user['User'];
        return false;
    }  
 


PROBLEM: egal welches passwort ich eingebe im login-formular er übergibt in das SELECT immer den gleichen md5:
SELECT `User`.`id`, `User`.`username` FROM `users` AS `User` WHERE `username` = 'newuser' AND `password` = 'd41d8cd98f00b204e9800998ecf8427e' LIMIT 1

ob ich test, tröte, egal oder sonstwas eingebe, er nimmt immer diesen "md5 of nothing". wenn ich per var_dump ausgeben was in dem passwort feld für ein wert ist, kommt das ergebnis NULL. dementsprechend gibt die funktion validateLogin() ein false zurück und der login schlägt fehl.

was mache ich falsch?

ich bin echt am ende. versuche seit 2 ganzen tagen das rätsel zu lösen. ohne fremde hilfe krieg ich das nie raus. nie.

danke sehr :)

PS: habe mich übrigens an das tut gehalten: http://bakery.cakephp.org/articles/view ... x#comments
tom.fox
 
Beiträge: 11
Registriert: So 20. Jun 2010, 15:49

Re: Login: Kann den Wert nicht aus dem Passwort-Feld holen

Beitragvon mbrod » So 20. Jun 2010, 17:35

Ich habe das Problem jetzt nicht im Einzelnen nachvollzogen, erinnere mich aber, dass ich selbst mal ein Problem mit der Passwort Validierung hatte.
Siehe:http://www.cakephp-forum.com/models/problem-mit-passwort-validierung-validate-password-t437.html
In diesem Post gibt es noch weitere Verweise auf die Lösung des Problems hier im Forum und einem anderen Forum.
Allerdings wird die in CakePHP eingebaute Hashfunktion benutzt und nicht md5.
mbrod
 
Beiträge: 193
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: Login: Kann den Wert nicht aus dem Passwort-Feld holen

Beitragvon tom.fox » So 20. Jun 2010, 17:50

Hallo,

das problem ist, dass obwohl ein passwort im login-formular eingegeben wird, der wert des feldes "password" NULL ist. dadurch kommt eine fehlerhafte abfrage auf die DB zustande..
das feld "username" liefert aber ohne probleme einen wert. bsp:

ich melde mich an:
username: test
password: tritralullala

SELECT * from users where username=test and password= "d41d8cd98f00b204e9800998ecf8427e". dieser hash wird erzeugt, wenn der wert des formularfeldes NULL ist.
der hash-key steht also net für tritratrullala sondern NULL, weil er das eingegebene password nicht "findet"

und ich weiß nicht warum *grrr*
tom.fox
 
Beiträge: 11
Registriert: So 20. Jun 2010, 15:49

Re: Login: Kann den Wert nicht aus dem Passwort-Feld holen

Beitragvon mbrod » So 20. Jun 2010, 18:53

wenn ich per var_dump ausgeben was in dem passwort feld für ein wert ist, kommt das ergebnis NULL.
das feld "username" liefert aber ohne probleme einen wert.
Es muss ja einen Grund dafür geben, warum die Eingabe im password-Feld NULL liefert.
Ich weiß nur, dass CakePHP Felder mit dem Namen password (passwd, or psword) besonders behandelt, und die Auth-Component diese Felder automatisch hasht. Aber natürlich kein NULL daraus macht. Wenn ich es richtig sehe, benutzt Du aber gar nicht die Auth-Component. Oder?
mbrod
 
Beiträge: 193
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: Login: Kann den Wert nicht aus dem Passwort-Feld holen

Beitragvon tom.fox » So 20. Jun 2010, 19:15

nein die auth komponente nutze ich nicht..hab mal das tut von http://book.cakephp.org/de/view/172/Authentication nachgebaut und der login hatte gefunzt. ich wusste/weiß aber nicht inwiefern sich das auth komponenten zeugs individualisieren lässt. bspw. eigene fehlermeldungen oder prüfen während dem login ob der account aktiv ist.... daher hab ich meinen eigenen code geschrieben

aber ich könnte mal probieren andere namen für die pw-felder zu nehmen....
tom.fox
 
Beiträge: 11
Registriert: So 20. Jun 2010, 15:49

Re: Login: Kann den Wert nicht aus dem Passwort-Feld holen

Beitragvon tom.fox » So 20. Jun 2010, 20:29

jetzt klappts...es lag wirklich daran, dass ich "password" als namen für das input feld genutzt hab^^

besten dank mbrod....heute nacht kann ich sicher besser schlafen :)
tom.fox
 
Beiträge: 11
Registriert: So 20. Jun 2010, 15:49


Zurück zu Controller

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron