Comment faire pour revenir à la page appelante, dans CakePHP après la connexion
J'ai un problème sur retour à la page appelante:
first url: http://site.com/venue/apartments/1564/venue-name
referer url: null
Dans cette page, je peux modifier des choses à l'intérieur, j'ai donc un login
bouton pour aller à la page de connexion, après une connexion réussie, je voudrais revenir à la first url
.
second url: http://site.com/users/login
referer url: http://site.com/venue/apartments/1564/venue-name
quand j'essaie de connexion, en raison de la CakePHP règles d'action, je dois actualiser la page de connexion pour vérifier les informations d'identification, le problem
commence ici:
third url: http://site.com/users/login
referer url: http://site.com/users/login
par l'actualisation de la page, et de vérifier les informations d'identification dans le login
action de users
contrôleur je me renvoyer la même page où j'étais avant, et maintenant je ne peux pas revenir à la first url
.
J'ai essayé une solution par la définition d'une variable de session dans AppController qui vérifie si je ne suis pas dans le login
page action et de le faire:
AppController.php
public function beforeFilter () {
$this->setRedirect();
}
public function setRedirect () {
if ($this->request->params['controller'] != 'users' && $this->request->params['action'] != 'login') {
$this->Session->write('redir', array('controller'=>$this->request->params['controller'], 'action'=>$this->request->params['action'], implode($this->request->params['pass'], '/')));
}
}
Par les tests de la session var avec debug($this->Session->write('redir'));
tout semble fonctionne parfaitement jusqu'à ce que je vais à la login
action:
UsersController.php
public function login () {
if ($this->request->is ('post')){
if ($this->Auth->login()) {
$redir = $this->Session->read('redir');
if (!empty($redir)) {
$this->redirect ($redir);
} else {
$this->redirect ($this->Auth->redirect());
}
}
}
}
De faire cette pause, l'application et si je debug($redir);
var-je obtenir:
array(
'controller' => 'js',
'action' => 'jquery',
(int) 0 => 'plugin/jquery.validata.1.7.min' //just a jquery plugin loaded in default.ctp
)
au lieu de
array(
'controller' => 'venue',
'action' => 'apartments',
(int) 0 => '1564/venue-name'
)
Si je debug($redir);
dans tout autre point de vue de l'ensemble du site, tout fonctionne bien, et j'ai le droit de données.
J'ai pensé à une sorte de Séance de la routine de protection pour $this->Auth->login()
d'action, mais c'est totalement absurde pour moi.
Comment puis-je rediriger l'utilisateur connecté à la dernière page, ce qui n'est pas le login
page d'affichage?
oui, il est, je n'ai pas trouvé une bonne façon de le faire.
Je suppose que vous savez que le
Auth
composant a cette fonctionnalité intégrée. Il suffit de ne $this->redirect($this->Auth->redirect());
dans le if ($this->Auth->login()) {
bloc. Est-il une raison pourquoi vous ne faites pas cela?Ouais, c'était mon premier essai, mais j'ai le problème de connexion, une fois l'action de connexion est appelé pour la deuxième fois pour vérifier les informations d'identification utilisateur le referer est le point de vue de login à la place de la précédente. Je suis sûr que je suis absent quelque chose d'évident, mais je ne sais pas ce que c'est.
Je comprends ce que vous dites, mais la
Auth
composant en tienne compte. Jetez un oeil à le code à voir par vous-même. Par ailleurs, votre code ne doit pas essayer d'accéder à un fichier JavaScript par CakePHP. Ne se rendant directement sur le fichier JavaScript dans votre navigateur (par exemple, example.com/js/jquery/plugin/jquery.validata.1.7.min.js )? Êtes-vous à l'aide d'Apache et avez-vous des "mod_rewrite" est-il activé?OriginalL'auteur vitto | 2013-01-04
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé ceci:
$this->redirect(Controller::referer());
?Que j'aurais du relire l'ensemble de votre question pour être sûr, mais cela devrait aussi fonctionner:
$this->redirect( $this->referer() );
OriginalL'auteur emersonthis
J'ai utilisé les sessions de garder la dernière url accessibles et si la connexion est réussie, l'utilisateur sera redirigé vers elle.
D'abord dans AppController.php j'ai enregistrer la session de l'url, sauf pour la connexion et la déconnexion des actions:
Dans le UserController.php pour la connexion d'action, j'ai le code suivant:
OriginalL'auteur Silvanu
Je le fais juste comme ça:
OriginalL'auteur Henricristo