2012-08-11 118 views
0

我無法使用AuthComponent登錄任何用戶。 用戶表的名字是用戶,有一些重要的字段,例如user_id,user_password,密碼字段沒有散列。CakePHP 2驗證組件

這是我的AppController

class AppController extends Controller { 
    public $components = array(
    'Session', 
    'Auth' => array(
     'loginRedirect' => array('controller' => 'users', 'action' => 'index'), 
     'logoutRedirect' => array('controller' => 'users', 'action' => 'home'), 
     'authError' => 'You cannot view this page', 
     'authorize' => array('controller') 
    ) 
); 

    public function isAuthorize($user) { 
    return true; 
    } 

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

這是我UsersController

class UsersController extends AppController { 
    public function login() { 
    if ($this->request->is('post')) { 
     if ($this->Auth->login()) { 
     $this->redirect($this->Auth->redirect()); 
     } else { 
     $this->Session->setFlash('Cannot login in'); 
     } 
    } 
    } 
} 

這是我的用戶模型。

class User extends AppModel { 
    public $name = 'User'; 
    public $primaryKey = 'user_id'; 
    public $belongsTo = 'Group'; 
} 

這是我的看法

<h2>Login</h2> 

<?php 

echo $this->Form->create(); 
echo $this->Form->input('user_id', array('label' => 'User ID', 'type' => 'text')); 
echo $this->Form->input('user_password', array('label' => 'Password', 'type' => 'password')); 
echo $this->Form->end('Login'); 

?> 

當我輸入修正USER_ID,然後按下密碼登錄按鈕,我得到的消息,從我無法登錄的UsersController。這裏出了什麼問題?

另外,我真的不明白AuthComponent的概念:login(),它是如何工作的,檢查user_id和密碼數據庫,如何知道哪個字段包含user_id,哪個包含密碼???

請幫忙。 謝謝。 Kongthap

+1

請按照本書中的教程進行操作,然後根據您的需求進行更改。然後你就會明白它如何更好地工作。 – Dave 2012-08-11 15:38:13

回答

1

有幾件事情,我注意到:

public function isAuthorize($user) { 

這種方法缺少年底 'd'。它應該是

public function isAuthorized($user) { 

接下來,在默認情況下,蛋糕預計將在名爲「用戶名」和「密碼」字段來標識用戶。所以,如果你想改變這一點,你需要做到這一點:

class AppController extends Controller { 
    public $components = array(
    'Session', 
    'Auth' => array(
     'loginRedirect' => array('controller' => 'users', 'action' => 'index'), 
     'logoutRedirect' => array('controller' => 'users', 'action' => 'home'), 
     'authError' => 'You cannot view this page', 
     'authorize' => array('controller'), 
     'authenticate' => array(
      'Form' => array(// THIS IS WHERE YOU CHANGE THE DEFAULT FIELDS 
      'fields' => array('username' => 'user_id','password' => 'user_password') 
     ) 
     ) 
    ) 
); 

該代碼沒有進行測試,但應該設置你在正確的軌道上。但是,正如Dave所說,通過完整的DOCO真的很值得去了解它是如何工作的:http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html

最後,我不確定'user_id'是不錯的列名選擇。您希望列名'user_id'是某個表中的外鍵,指向'users'表的'id'列。如果這不是它所服務的功能,那麼你應該用一個不同的名字。