後,我有一個問題就回到引用者頁面:如何回去的referer頁面CakePHP中登錄
first url: http://site.com/venue/apartments/1564/venue-name
referer url: null
在此頁面中我可以編輯裏面的東西,所以我有一個login
按鈕轉到登錄頁面成功登錄後,我想回到first url
。
second url: http://site.com/users/login
referer url: http://site.com/venue/apartments/1564/venue-name
,當我嘗試登錄,由於CakePHP的行動規則,我必須刷新登錄頁面,檢查憑據時,problem
從這裏開始:通過刷新頁面
third url: http://site.com/users/login
referer url: http://site.com/users/login
,並檢查login
行動users
控制器中的憑據我得到作爲參考我在之前的同一頁,現在我不能回到first url
。
AppController.php
public function beforeFilter() {
$this->setRedirect();
}
public function setRedirect() {
if ($this->request->params['controller'] != 'users' && $this->request->params['action'] != 'login') {
$this->Session->write('redir', array('controller'=>$this->request->params['controller'], 'action'=>$this->request->params['action'], implode($this->request->params['pass'], '/')));
}
}
通過與debug($this->Session->write('redir'));
一切似乎測試會議無功:
我通過設置AppController的,如果我在login
操作頁面又不是它檢查會話變量,這樣嘗試了一些解決方案完美的作品,直到我去login
行動:
UsersController.php
public function login() {
if ($this->request->is ('post')){
if ($this->Auth->login()) {
$redir = $this->Session->read('redir');
if (!empty($redir)) {
$this->redirect ($redir);
} else {
$this->redirect ($this->Auth->redirect());
}
}
}
}
這樣做破壞應用程序,如果我debug($redir);
變種我得到:
array(
'controller' => 'js',
'action' => 'jquery',
(int) 0 => 'plugin/jquery.validata.1.7.min' // just a jquery plugin loaded in default.ctp
)
代替
array(
'controller' => 'venue',
'action' => 'apartments',
(int) 0 => '1564/venue-name'
)
如果我debug($redir);
在整個網站中的任何其它視圖,一切正常,我也得到正確的數據。
我認爲在$this->Auth->login()
行動的某種會話保護例程中,但對我來說這完全是無稽之談。
我該如何重定向登錄到不是login
視圖頁的最後一頁?
所以,你想要做的是將用戶重定向到登錄表單,當他們試圖訪問需要身份驗證的頁面,然後在auth成功時將它們重定向到該頁面? –
是的,我沒有找到正確的方法來做到這一點。 – vitto
我猜你知道'Auth'組件具有內置的這個功能。只要執行'$ this-> redirect($ this-> Auth-> redirect());'if($ this-> Auth-> login()){'block。你有沒有這樣做的原因? – Nick