2012-04-05 6 views
2

Ich bin neu bei CakePHP und ich habe ihre Dokumentation gelesen und ich befolge ihre einfache Authentifizierung Beispiel. Ich habe auch weit und breit (einschließlich Antworten auf dieser Seite) nach einer Antwort auf mein Problem gesucht.

Ich benutze CakePHP 2.0 und meine Userscontroller-Login-Funktion sieht wie folgt aus:

function login() { 
    if ($this->request->is('post')) { 
     if ($this->Auth->login(/*$this->request->data*/)) { 
      $this->redirect($this->Auth->redirect()); 
     }else { 
      $this->Session->setFlash(__('Invalid username or password, try again')); 
     } 
    } 
} 

Mein AppController sieht wie folgt aus:

public $components = array(
        'Session', 
        'Auth' => array(
          'loginRedirect' => array('controller' => 'pages', 'action' => 'display'), 
          'logoutRedirect' => array('controller' => 'pages', 'action' => 'display') 
        ) 
     ); 

public function beforeFilter() { 
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
} 

Mein Benutzer Modell:

class User extends AppModel { 

public $name = "User"; 

} 

Und das Login-Formular:

Das Problem ist, dass ein Benutzer nicht angemeldet wird. Wenn $ this-> Auth-> login() ohne $ this-> request-> data als Parameter aufgerufen wird, wird nichts in die Session geschrieben Die Seite wird nur aktualisiert. Wenn Sie jedoch die $ this-> request-> -Daten angeben, werden die Anmeldeinformationen in die Sitzung geschrieben und ich werde korrekt umgeleitet. Allerdings habe ich festgestellt, dass man sich mit $ this-> Auth-> einloggen ($ this-> request-> data) einloggen kann, auch wenn diese nicht in der Datenbank vorhanden sind. Außerdem passiert nichts, wenn ich falsche Anmeldedaten eingegeben habe. Es werden keine Flash-Nachrichten angezeigt.

Ich versuche nicht, etwas besonderes zu tun, alles was ich will, ist die Möglichkeit, einen Benutzer einzuloggen. Ich habe eine einfache Benutzer Tabelle mit Benutzernamen und Passwort Felder und ich habe ihr Beispiel gefolgt und lesen Sie ihre Dokumentation, aber immer noch nichts, was ich versucht habe, hat funktioniert.

Ich entschuldige mich, wenn ich nicht alle Informationen zur Verfügung gestellt habe, um eine Antwort zu geben. Jede Hilfe wird sehr geschätzt.

+0

vorsichtig: Sie müssen Login() um jeden Preis leer lassen. Wenn Sie $ this-> request-> data eingeben, wird dieser Benutzer unabhängig von dem Benutzernamen und dem Passwort angemeldet. Dies beeinträchtigt Ihre Anmeldung. Versuchen Sie zu debuggen, was das Hash-Kennwort bei der Suche ist, und vergleichen Sie es mit der aktuellen Hash-Zeichenfolge in der Datenbank. Wahrscheinlich stimmen sie nicht überein! – mark

Antwort

0

Wo haben Sie die zu verwendende Engine definiert? wahrscheinlich das gleiche Problem wie http://ask.cakephp.org/questions/view/unable_to_login , die gelöst wurde Einstellung der Motor/Adapter wie in der Dokumentation beschrieben.

+0

Ich dachte, Form war der Standardwert und weil ich Benennungskonventionen durch die Definition von Benutzername und Passwort Felder in meiner Datenbank Kuchen würde automatisch versuchen, Benutzer basierend auf Werten in diesen Feldern zu authentifizieren. :/ –

+0

Nein, das hat nicht funktioniert. :/ –

+0

ist es vielleicht ein PUT? statt POST? Was genau passiert "hat nicht funktioniert" sagt nicht viel über das vorliegende Problem aus. – mark

5

Ich hatte genau die gleiche Erfahrung. Was mir passierte, war, dass ich mich erfolgreich mit einem Benutzernamen und einem Passwort anmelden konnte, aber ich hatte nie Code in der Ansicht, der zeigte, dass ich eingeloggt war. Ich war auch wirklich verwirrt, als ich mich danach anmeldete mit zufälligen Benutzernamen und Passwörtern, gab es mir immer noch eine erfolgreiche Login-Benachrichtigung.

Ich denke, was passiert ist, war, wenn Sie in einem eingeloggten Zustand sind, dann wird $this->Auth->login()true egal welchen Benutzernamen und Passwort Sie eingeben. Die Lösung wäre wahrscheinlich, in Ihrem Programm irgendwie $this->Auth->logout() aufzurufen oder Ihre Cookies zu leeren, damit das Programm Sie nicht mehr als eingeloggt angibt. Dann wird $this->Auth->login() wieder normal funktionieren.

Verwandte Themen