2014-04-15 72 views
3

我使用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。不知道其他人怎么会不正确地重定向,但我很好奇,如果有人遇到这种情况,如果是这样,你如何解决它,无论是一个错误的配置文件或调整框架。laravel重定向::打算()重定向到完整的URL

ETA:在404堆栈跟踪,Laravel说REQUEST_URI值设置为/http://www.some.dev/secret。所以它似乎并不是一个.htaccess混乱。

ETA2:测试了我的路线有两种方式:

Route::get('secret', array('before' => 'auth', 'uses' => '[email protected]'));

Route::get('/secret', array('before' => 'auth', 'uses' => '[email protected]'));

没有区别。

eta3:我只是想继续添加东西。所以这种行为只发生在我注销Eloquent(但不是SSO)时,即使只是第一次进入页面。因此,让我们第一次说,我没有登录SSO或雄辩。我通过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,我很好。所以看来,当我重新验证我的Eloquent凭证Auth::login它搞乱了我的REQUEST_URI。那可能是因为我从不同的域中弹出证书,所以框架必须将相对URL转换为静态的?

+0

REDIRECT_URI前面是否真的有斜线?这当然是一个问题。 – Joost

+0

我想有两种方法看它:它应该是'/ [相对路径]'还是'[完整路径]'?我会解决。因为'Illuminate \ Routing \ UrlGenerator.php:61'返回'$ this-> request-> fullUrl();',所以我怀疑Laravel希望它是'[full path]'。 – mounty

回答

0

我怀疑你首先传递给SSO服务器的redirectBackTo URL不正确。