2017-05-30 2 views
1

Ich versuche nach angemeldet aktuellen Seite zu umleiten, mit CakePHP 3.4, aber ich bin wie dieserAnmelden Umleitung in CakePHP 3.4

localhost Seite immer nicht funktioniert, locahost Seite umleiten zu viele mal. Versuchen Sie, Ihre Cookies zu löschen

für 2 Sekunden danach wird es auf die Startseite umleiten. Bitte helfen Sie mir hier draußen. Hier mein Code

In appController.php

public function initialize() 
{ 
    parent::initialize(); 
    $this->loadComponent('RequestHandler'); 
    $this->loadComponent('Flash'); 
    $this->loadComponent('Auth', [ 
     'authorize' => ['Controller'], 
     'authenticate' => [ 
      'Form' => [ 
       'fields' => [ 
        'username' => 'email', 
        'password' => 'password' 
       ], 
       'scope' => ['userStatus' => '1'] 
      ] 
     ], 
     'loginAction' => [ 
      'controller' => 'Users', 
      'action' => 'login' 
     ], 
     'unauthorizedRedirect' => $this->referer(), 
     'logoutRedirect'  => [ 
       'controller' => 'Users', 
       'action'  => 'login' 
     ] 
    ]); 
} 

In loginController.php

function login{ 
if ($this->request->is('post')) { 
    if ($this->Auth->login()) 
    { 
     $this->redirect($this->referer()); 
    } 
    else { 
     $this->Flash->error(__('Your username or password is incorrect.')); 
    } 
    } 
} 

Antwort

1

Sieht aus wie Sie eine Umleitung Schleife hier. Sie sollten AuthComponent::redirectUrl() verwenden.

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')); 
     } 
    } 
} 

Siehe Redirecting Users After Login in der Dokumentation.

Nachdem Sie einen Benutzer angemeldet haben, möchten Sie diese normalerweise zurück zu dorthin leiten, wo sie herkamen. . Übergeben Sie eine URL in das Ziel gesetzt ein Benutzer sollte umgeleitet werden nach der Anmeldung

Wenn kein Parameter übergeben wird, wird die zurückgegebene URL verwenden Sie die folgenden Regeln:

  • Gibt die normalisierte URL aus Der Umleitungs-Abfragezeichenfolgenwert, wenn er vorhanden ist und für dieselbe Domäne, auf der die aktuelle App ausgeführt wird. Vor 3.4.0 wurde der Sitzungswert Auth.redirect verwendet.
  • Wenn keine Abfragezeichenfolge/Sitzungswert vorhanden ist und eine Konfig loginRedirect vorliegt, wird der Wert loginRedirect zurückgegeben.
  • Wenn kein Umleitungswert vorliegt und keine loginRedirect, wird / zurückgegeben.
+0

Ihnen sehr danken. Nun funktioniert alles gut, aber NULL Abfrageparameter-String erhalten, obwohl übergeben Abfrage Parameter-String wie diese "Login? Redirect =% 2Farticles% 2Fadd". Hast du eine Ahnung, wo es falsch wäre? – Ashok

0

Verwenden $this->Auth->redirectUrl() statt $this->referer().

Nachdem Sie einen Benutzer angemeldet haben, möchten Sie diese im Allgemeinen dorthin zurückleiten, wo sie herkamen. eine URL Pass in das Ziel gesetzt ein Benutzer nach der Anmeldung umgeleitet werden soll.

  • Gibt die normalisierte URL aus dem Query-String-Wert Redirect, wenn es die aktuelle App läuft auf Gegenwart und für die gleiche Domäne ist. Vor 3.4.0 wurde der Auth.redirect-Sitzungswert verwendet.
  • Wenn keine Abfragezeichenfolge/Sitzungswert vorhanden ist und eine Konfiguration loginRedirect vorhanden ist, wird der Wert loginRedirect zurückgegeben.
  • Wenn kein Umleitungswert vorliegt und keine loginRedirect, wird / zurückgegeben.

auf Ihre AuthComponent Konfigurationsoptionen hinzufügen:

loginRedirect

Die URL (als String oder Array definiert) an den Controller-Aktion Benutzer zu nach der Anmeldung umgeleitet werden soll. Dieser Wert wird ignoriert, wenn der Benutzer einen Auth.redirect-Wert in seiner Sitzung hat.

Der Code sollte so sein:

In appController.php

public function initialize() 
{ 
    parent::initialize(); 
    $this->loadComponent('RequestHandler'); 
    $this->loadComponent('Flash'); 
    $this->loadComponent('Auth', [ 
     'authorize' => ['Controller'], 
     'authenticate' => [ 
      'Form' => [ 
       'fields' => [ 
        'username' => 'email', 
        'password' => 'password' 
       ], 
       'scope' => ['userStatus' => '1'] 
      ] 
     ], 
     'loginAction' => [ 
      'controller' => 'Users', 
      'action' => 'login' 
     ], 
     'unauthorizedRedirect' => $this->referer(), 
     'logoutRedirect'  => [ 
       'controller' => 'Users', 
       'action'  => 'login' 
     ], 
     'loginRedirect' => [ 
      'controller' => 'Pages', 
      'action' => 'display'  
     ] 
    ]); 
} 

In loginController.php

function login{ 
if ($this->request->is('post')) { 
    if ($this->Auth->login()) 
    { 
     $this->redirect($this->Auth->redirectUrl()); 
    } 
    else { 
     $this->Flash->error(__('Your username or password is incorrect.')); 
    } 
    } 
} 

Siehe auch Redirecting Users After Login

+0

Vielen Dank. Jetzt funktioniert alles gut, aber NULL Abfrage Parameter-String erhalten, obwohl Übergabe Abfrage Parameter String wie diese "Login? Redirect =% 2Farticles% 2Fadd". Hast du eine Ahnung, wo es falsch wäre? – Ashok

+0

Wie versuchen Sie, diesen Wert abzurufen? –

+0

mit '$ this-> request-> query ('redirect');' – Ashok

Verwandte Themen