我正在为Laravel 4使用自定义Auth驱动程序,需要重定向回任何触发身份验证过程的页面。驱动程序将用户退出到完全不同的域上的单一登录服务,然后在其服务已对用户进行签名后再次返回。所有这些工作正常,直到第一次从SSO服务器返回用户。我正在使用return Redirect::intended();
语句返回到用户需要的位置,但是不是访问http://www.some.dev/secret
并重定向到同一个用户,而是将用户重定向到http://www.some.dev/http://www.some.dev/secret
,当然,不太正常。我追查了Laravel如何存储REQUEST_URI
会话变量,它似乎拉出了完整的URL。不确定其他人如何不会错误地重定向,但我很好奇是否有人遇到过这种情况,如果有的话,你是如何修复它的,无论是错误的配置文件还是调整框架。
eta :在404堆栈跟踪中,Laravel说REQUEST_URI
值设置为/http://www.some.dev/secret
。所以它似乎不是一个.htaccess蠢。
eta2 :以两种方式测试我的路线:
Route::get('secret', array('before' => 'auth', 'uses' => 'ExampleController@phpinfo'));
和
Route::get('/secret', array('before' => 'auth', 'uses' => 'ExampleController@phpinfo'));
没有区别。
eta3 :我只是要继续添加内容。所以这种行为只发生在我退出Eloquent(但不是SSO)时,即使那时我才第一次去页面。所以,让我们说第一次,我没有登录SSO或Eloquent。我通过SSO登录,然后通过Eloquent在内部登录。我弄错了REQUEST_URI
。我回到地址栏,抛弃http://www.some.dev/
后面的内容并输入secret
(直接浏览到http://www.some.dev/secret
)。我没有任何问题到达页面。在我的页面上有一个注销链接,用于清除Eloquent凭据。我还在页面底部回显$_SERVER['REQUEST_URI']
,我看到它是/secret
。我单击注销按钮,清除Eloquent凭据但保持SSO凭证存活。我浏览回/secret
,我看到同样的废话REQUEST_URI
。清除,再次输入secret
,我很好。因此,当我用Auth::login
重新验证我的Eloquent凭据时,它似乎弄乱了我的REQUEST_URI
。可能是因为我在不同的域上弹出凭据,所以框架必须将相对URL转换为静态URL吗?
答案 0 :(得分:0)
我怀疑你首先传递给SSO服务器的redirectBackTo网址是不正确的。