返回引用页面时遇到问题:
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
我得到了与以前相同的页面,现在我无法返回first url
.
我通过在 AppController 中设置会话变量尝试了一些解决方案,该变量检查我是否不在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());
}
}
}
}
这样做会破坏应用程序,如果我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()
采取行动,但这对我来说完全是无稽之谈。
如何将登录的用户重定向到不是login
查看页面的最后一页?