2014-04-15 66 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不正確。