我回到referer页面时遇到问题:
first url: http://site.com/venue/apartments/1564/venue-name
referer url: null
在这个页面中,我可以编辑里面的东西,所以我有一个login
按钮进入登录页面,成功登录后,我想回到first url
。
second url: http://site.com/users/login
referer url: http://site.com/venue/apartments/1564/venue-name
当我尝试登录时,由于CakePHP操作规则,我必须刷新登录页面以检查凭据,problem
从这里开始:
third url: http://site.com/users/login
referer url: http://site.com/users/login
通过刷新页面,并检查login
控制器的users
操作中的凭据,我得到的是我以前的相同页面,现在我不能回到{ {1}}。
我通过在AppController中设置会话变量来尝试一些解决方案,该变量检查我是否在first url
操作页面中并执行此操作:
login
通过使用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'], '/')));
}
}
测试会话变量,在我转到debug($this->Session->write('redir'));
操作之前,一切似乎都很完美:
login
执行此操作会中断应用程序,如果我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());
}
}
}
}
var得到:
debug($redir);
而不是
array(
'controller' => 'js',
'action' => 'jquery',
(int) 0 => 'plugin/jquery.validata.1.7.min' // just a jquery plugin loaded in default.ctp
)
如果我array(
'controller' => 'venue',
'action' => 'apartments',
(int) 0 => '1564/venue-name'
)
在整个网站的任何其他视图中,一切正常并且我获得了正确的数据。
我在debug($redir);
行动的某种会话保护程序中想过,但这对我来说完全是胡说八道。
如何重定向登录到不是$this->Auth->login()
视图页的最后一页的用户?
答案 0 :(得分:15)
你试过这个:$this->redirect(Controller::referer());
?
我必须重新阅读您的整个问题,但这也应该有效:$this->redirect( $this->referer() );
答案 1 :(得分:11)
我使用会话来保持访问的最后一个URL,如果登录成功,用户将被重定向到它。
首先在AppController.php中我在会话中保存url,登录和注销操作除外:
public function beforeFilter() {
$url = Router::url(NULL, true); //complete url
if (!preg_match('/login|logout/i', $url)){
$this->Session->write('lastUrl', $url);
}
}
在用于登录操作的UserController.php中,我有以下代码:
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
if ($this->Session->read('lastUrl')){
$this->redirect($this->Session->read('lastUrl'));
exit;
}else{
return $this->redirect($this->Auth->redirect());
}
}
$this->Session->setFlash(__('Invalid username or password'));
}
}
答案 2 :(得分:0)
我这样做:
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
$this->redirect($this->Session->read('referer'));
} else {
$this->Session->setFlash(__('Não foi possível efetuar o login. Usuário ou senha inválidos'), 'default', array('class' => 'alert alert-danger'));
}
} else {
$this->Session->write('referer', $this->referer());
}
}