2016-07-21 14 views

Antwort

1

genau das gleiche Problem hatten hier ist, wie ich es behoben. In Ihrem AppController, fügen Sie diese zu Ihrer Initialisierungsfunktion:

$this->loadComponent('Auth', [ 
     'authenticate' => [ 
      'Form' => [ 
       'fields' => [ 
        'username' => 'username', 
        'password' => 'password' 
       ] 
      ] 
     ], 
     'loginAction' => [ 
      'controller' => 'Users', 
      'action' => 'login' 
     ], 
    ]); 

Dies zwingt grundsätzlich den Benutzer zur Anmeldung in vor allem anderen.

Und in der Steuerung, die die Login mir diese zusätzlichen Griffe:

if($this->Auth->user()){ 
     $this->Flash->error(__('You are already logged in!')); 
     return $this->redirect(['controller' => 'index']); 
    } 

bereits angemeldet ein Benutzer und wird auf die Homepage Diese überprüft, ob es umgeleitet, wenn dies den Fall.

+0

Mann, ich erinnere mich, ich habe versucht, die Auth-> Benutzer() und es hat nicht funktioniert. Aber nachdem ich deine Antwort gesehen habe, habe ich es erneut versucht und jetzt funktioniert es. Vielen Dank! –

+0

Ich weiß nicht warum, aber $ this-> Auth-> user() funktioniert nicht in der Logout-Funktion, da ich versuche, nicht angemeldete Benutzer daran zu hindern, sich abzumelden. Es scheint, dass diese Funktion in einigen Funktionen nicht funktioniert (wie ich schon vorher gesehen habe) –

+0

Hier ist die Funktion, die ich für die Abmeldung verwende: öffentliche Funktion logout() { \t \t $ this-> Flash-> Erfolg (__ (' Du bist ausgeloggt. ')); \t \t zurückgeben $ this-> redirect ($ this-> Auth-> logout()); \t} –

-1

AuthComponent::identify()

Sie müssen manuell $this->Auth->identify() anrufen, um den Benutzer mit Anmeldeinformationen in Anfrage zu identifizieren. Verwenden Sie dann $this->Auth->setUser(), um den Benutzer einzuloggen, d. H. Benutzerinformationen in Sitzung zu speichern. Beim Authentifizieren von Benutzern werden angefügte Authentifizierungsobjekte in der Reihenfolge geprüft, in der sie angehängt sind. Sobald eines der Objekte den Benutzer identifizieren kann, werden keine anderen Objekte geprüft. Eine Probe Login-Funktion für ein Login-Formular arbeiten könnte wie folgt aussehen:

public function login() 
{ 
if ($this->request->is('post')) { 
    $user = $this->Auth->identify(); 
    if ($user) { 
     $this->Auth->setUser($user); 
     return $this->redirect($this->Auth->redirectUrl()); 
    } else { 
     $this->Flash->error(__('Username or password is incorrect'), [ 
      'key' => 'auth' 
     ]); 
    } 
} 
} 

Der obige Code einen Benutzer zuerst zu identifizieren, indem Sie die POST-Daten versuchen werden. Wenn dies erfolgreich ist, legen wir die Benutzerinformationen für die Sitzung fest, so dass sie für alle Anfragen bestehen bleiben und dann entweder zu der zuletzt besuchten Seite oder zu einer in der Konfiguration von loginRedirect angegebenen URL weitergeleitet werden. Wenn die Anmeldung nicht erfolgreich ist, wird eine Flash-Nachricht festgelegt.

Siehe diese Authentication Session

+0

Ihre Lösung ist fast identisch mit Login-Funktion aus dem Blog-Tutorial (http://book.cakephp.org/3.0/en/tutorials-and-examples/blog-auth-example/auth.html#authentication-login und abmelden). Und es verhindert auch nicht mehrere Logins. Ich möchte verhindern, dass sich eine Person, die sich an einem Computer angemeldet hat, erneut auf demselben Computer anmeldet. Der Benutzer muss sich zuerst abmelden, bevor er sich erneut anzumelden versucht. –

+0

Wir müssen die Daten in Sitzung oder Cookie beibehalten, um es zu tun. Wenn wir uns einloggen, müssen wir die Informationen in der Sitzung oder im Cookie persistieren, bis die Abmeldung angeklickt wird. Besser ist es, mit Cookie-Komponente verschlüsselt zu gehen. Siehe [link] (http://book.cakephp.org/3.0/en/controllers/components/cookie.html). Hinweis: Sie müssen den Wert auf jeder Seite vom Cookie überprüfen. Wenn der Wert nicht vorhanden ist, muss er zur Anmeldeseite umgeleitet werden. – Thennarasan