CakePHP登录重定向到请求的URL

CakePHP登录重定向到请求的URL,cakephp,redirect,url-routing,Cakephp,Redirect,Url Routing,当用户单击需要登录的链接时,我们当前会将其重定向到登录页面,但我们会丢失预期的URL。什么是最好的方式来说明该URL并在用户登录后将其重定向到请求的页面 我们正在使用最新的稳定版本的蛋糕。谢谢 --编辑-- 它是这样配置的 $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); $this->Auth->logoutRedirect = array('con

当用户单击需要登录的链接时,我们当前会将其重定向到登录页面,但我们会丢失预期的URL。什么是最好的方式来说明该URL并在用户登录后将其重定向到请求的页面

我们正在使用最新的稳定版本的蛋糕。谢谢

--编辑--

它是这样配置的

$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');
用户\控制器中的登录功能

function login() {
    Debugger::log("Redirect Session Key:" . $this->Session->read('Auth.redirect'), $level = 7);
    $ref = $this->referer();
    Debugger::log("referer():" . $ref, $level = 7);
}
当我导航到未经授权的页面(如localhost/mysite/unauthorized)时,我会被重定向到localhost/mysite/users/login。在我的debug.log文件中,重定向会话密钥打印为users/dashboard,这意味着没有有效的引用。为了验证这一假设,我还打印了登录函数中的referer,它实际上返回“/”,这是在我相信请求者没有提供referer信息的情况下的默认值


“根据cake文档,只有当用户不是来自外部链接时,authcomponent才会在会话中保留此内容。”

请再读一遍:

AuthComponent通过将此值存储在会话中的
Auth.redirect
键下,来记住在要求您进行身份验证之前您试图访问的控制器/操作对。但是,如果未设置此会话值(例如,如果您从外部链接进入登录页面),则用户将被重定向到LoginDirect中指定的URL

它将记住您试图访问的页面,除非您直接进入登录页面,因此没有您之前的页面。如果链接到
/foo/secret\u页面
,并被重定向到登录页面,则会话中应记住
/foo/secret\u页面

如果您摆脱了
$this->Auth->autoRedirect=false
并让AuthComponent完成它的工作,它应该按照您想要的方式工作


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

Auth组件应自动在当前会话中保留“未经授权”的地址,并在成功登录后重定向到该地址。它是如何配置的?根据cake文档,只有当用户不是来自外部链接时,authcomponent才会在会话中保留此功能。我的使用案例是当用户点击电子邮件中的链接进入需要登录的页面时。如果我去掉“$this->Auth->autoRedirect=false”,登录功能将无法正确处理?至少文件中似乎暗示了这一点。此外,即使成功登录,login()函数中的这条语句也会显示空值。“调试器::log($this->Auth->user(),$level=7);”知道这里发生了什么吗?谢谢@wcolbert请将您完成的
登录
功能也发布出来。我已经发布了。我已经大大简化了函数,试图找出问题所在。似乎当我在浏览器中导航到某个页面时,预期的页面并不像我预期的那样显示为推荐人。它也没有被传递到Auth.Redirect会话密钥。即使登录函数基本上被注释掉,也没有重定向到/foo/secret_page@wcolbert很高兴它起作用了。重定向问题可能很难调试…:)