我有一个提交页面,它是一个ajax弹出窗口。如果用户未登录,则会弹出模式登录/注册对话框。登录后,它们将被定向到主页面,因为它不记得引用的内容(因为所有这些都是作为登录页面触发的 - 而不是实际的提交页面)。
我正在考虑在会话中保存重定向网址,这样当他们成功登录时,我可以将它们重定向到beforeFilter()
中的相应页面或其他内容......
我在考虑这样的事情(伪):
public function submit() {
if (!$this->Auth->login()) {
$this->Session->set('Auth.redirect', '/submit');
}
}
然后在我的beforeFilter中检查登录时是否存在,如果存在,删除会话并将其重定向到该URL?
有没有更好的方法来解决这个问题,还是我的合法?
我的beforeFilter:
public function beforeFilter() {
$this->Auth->loginRedirect = array('controller' => '', 'action' => 'login');
$this->Auth->allow(
'Search',
'loginSignUpPrompt'
);
}
答案 0 :(得分:2)
实际上,Auth组件已经内置了此功能。
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
return $this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth');
}
}
}
此方法的默认值是用户来自的页面。但是如果你想要它,可以在Auth设置中覆盖。
请参阅http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html有关“识别用户并将其登录”
的部分答案 1 :(得分:1)
除非用户必须输入某种表单数据(例如在您的登录示例中),否则您可以使用$this->redirect($this->referer());
。当我遇到像这样的实例时,我几乎做你正在做的事情,并将先前的URL存储在会话变量中,然后在我将它们重定向回原始URL时销毁该变量。您可能对使用here感兴趣的beforeRedirect()回调组件。