2010-10-18 201 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