2015-04-27 29 views
0

我知道這個主題有很多問題,但據我瞭解,應該有一個錯誤修正。所以我認爲我的問題必須是一個不同的問題,因爲我使用CakePHP 2.5.6,它應該有錯誤修正,正確的?CakePHP身份驗證:註銷重定向錯誤和雙重網址基地

那麼,我正在嘗試將「簡單身份驗證和授權應用程序」改編爲我的項目。只要我不添加行 'authorize'=>數組('Controller') 我可以添加用戶,登錄,註銷和登錄和註銷重定向工作正常。

只要我補充該行的應用程序的行爲怪異: 1.登錄和登錄重定向工作 2.用戶/註銷導致過一個缺少 - 控制器 - 錯誤的,因爲它調用雙基的URL。它還調用登錄重定向的重定向url,而不是註銷重定向。當我致電/用戶/註銷應用程序試圖存取權限本地主機/ project_xyz/project_xyz /測試

的AppController:

class AppController extends Controller { 
    public $components = array(
     'Session', 
     'Auth' => array(
      'loginRedirect' => array(
       'controller' => 'tests', 
       'action' => 'index' 
      ), 
      'logoutRedirect' => array(
       'controller' => 'pages', 
       'action' => 'display','home' 
      ), 
      'authenticate' => array(
       'Form' => array(
        'passwordHasher' => 'Blowfish' 
       ) 
      ), 
      'authorize' => array('Controller'), 
     ) 
    ); 

    public function isAuthorized($user) { 
    // Admin can access every action 
    if (isset($user['role']) && $user['role'] === 'admin') { 
     return true; 
    } 

    // Default deny 
    return false; 
} 

    public function beforeFilter() { 
     $this->Auth->allow('display'); 
    } 
} 

有人能幫忙嗎?

[編輯:]

我已將此添加到組件陣列:

'unauthorizedRedirect' => [ 
'controller' => 'users', 
'action' => 'login', 
'prefix' => false ] 

的效果是,當我現在請用戶/註銷,而不是以前的缺控制器誤差,我將被重定向到用戶/登錄。不幸的是用戶還沒有註銷。我仍然可以訪問一切,如果用戶在仍處於登錄

[編輯#2:]。

public function login() { 
    if ($this->request->is('post')) { 
     if ($this->Auth->login()) { 
      return $this->redirect($this->Auth->redirectUrl()); 
     } 
     $this->Session->setFlash(__('Invalid username or password, try again')); 
    } 
} 

public function logout() { 
    return $this->redirect($this->Auth->logout()); 
} 
+0

升級到最新的2.6.x穩定版本。 IIRC有一個與重定向有關的錯誤已修復。 – ADmad

+0

我做了升級到2.6.1。同樣的錯誤。 – Doena

+0

我剛剛嘗試過:在AppController的beforeFilter中放入allow - >'logout'。 $這 - > Auth->允許( '顯示', '退出'); 現在至少註銷工作。不幸的是,還有其他重定向問題:當我登錄時,我登錄,但重定向在第一次不起作用。即使我現在可以訪問保護區,但如果我第二次提交用戶憑據,我將只會被重定向。 – Doena

回答

2

什麼似乎是問題是,「註銷」必須是在beforeFilter,這我錯過:

public function beforeFilter() { 
    $this->Auth->allow('login','logout'); 
} 

不過,這隻適用於我結合這個AppController中的組件陣列中:

 'unauthorizedRedirect' => [ 
      'controller' => 'users', 
      'action' => 'login', 
      'prefix' => false ] 

如果我放棄這一點,並添加一些模型spedific isAuthorized功能,我仍然會得到與雙基url-missing-controller-error。 authorizedRedirect似乎有問題。這種解決方法對我來說雖然...