2010-10-18 167 views
3

当用户点击需要登录的链接时,我们当前将它们重定向到登录页面,但我们失去了预期的URL。记录该URL并将用户重定向到所请求的页面的最佳方式是什么?CakePHP登录重定向到请求的URL

我们使用最新的稳定版本的Cake。谢谢。

- 编辑 -

及其配置这样

$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login'); 
// $this->Auth->autoRedirect = false; 
$this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'dashboard'); 

登录功能在users_controller

function login() { 
    Debugger::log("Redirect Session Key:" . $this->Session->read('Auth.redirect'), $level = 7); 
    $ref = $this->referer(); 
    Debugger::log("referer():" . $ref, $level = 7); 
} 

当我导航到像本地主机/ mysite的/未授权的未经授权的页我被重定向到localhost/mysite/users/login。在我的debug.log文件中,重定向会话密钥作为用户/仪表板输出,这意味着没有有效的引荐来源。为了验证这个假设,我还在login函数中输出了referrer,它实际上返回“/”,这是在我相信请求者没有引用信息的情况下的默认值。

+1

AuthComponent应自动保留当前会话中的“未授权”地址,并在成功登录后在那里重定向。它是如何配置的? – deceze 2010-10-19 01:19:03

+0

根据蛋糕文档,如果用户不是来自外部链接,则authcomponent仅在会话中保留这一点。我的使用案例是当用户点击电子邮件中的链接到达需要登录的页面时。 – wcolbert 2010-10-20 04:48:50

回答

2

“根据蛋糕文档,如果用户不是来自外部链接,authcomponent只会在会话中保留这一点。”

阅读section再次:

的AuthComponent记得你试图让你被要求通过存储在Session这个值来验证自己的身份之前,控制器/动作对,Auth.redirect项下。但是,如果此会话值未设置(例如,如果您从的外部链接登录到登录页面),则用户将被重定向到loginRedirect中指定的URL。

它会记住您试图访问的页面,除非你去登录页面直接因此有你,再没有以前的页面。如果您链接到/foo/secret_page并被重定向到登录页面,则应在会话中记住/foo/secret_page

如果你摆脱了$this->Auth->autoRedirect = false并让AuthComponent做它的事情,它应该按照你想要的方式工作。

否则,您可以手动读取并设置'Auth.redirect'会话密钥以更好地控制重定向。

+0

如果我摆脱了 “$ this-> Auth-> autoRedirect = false” 登录功能获胜没有得到正确的处理?至少这就是它在文档中所暗示的含义。 而且,即使发生成功登录,login()函数内部存在的此语句也会显示空值。 “Debugger :: log($ this-> Auth-> user(),$ level = 7);” 有什么想法这里发生了什么? 谢谢! – wcolbert 2010-10-20 10:10:12

+0

@wcolbert请张贴完整的'login'函数。 – deceze 2010-10-20 10:11:26

+0

我发布了它。我已经极大地剥离了这个功能来试图指出问题。好像当我导航到浏览器中的页面时,预期的页面不会像我期望的那样显示为引荐。它也没有被传递给Auth.Redirect会话密钥。 – wcolbert 2010-10-20 23:36:07