2013-03-26 105 views
1

在我的AppController我有這樣的設置CakePHP的2.0的Acl +驗證+自定義的用戶名外地

public $components = array(
    'Acl', 
    'Auth' => array(
     'authorize' => array(
      'Actions' => array('actionPath' => 'controllers') 
     ) 
    ), 
    'Session', 
    'DebugKit.Toolbar' 
); 

在我的用戶模式,我沒有「用戶名」欄,我有「電子郵件」,所以我改變了$組件配置到:

public $components = array(
    'Acl', 
    'Auth' => array(
     'authorize' => array(
      'Actions' => array('actionPath' => 'controllers') 
     ), 
     'authenticate' => array(
      'Form' => array(
       'fields' => array(
        'username' => 'email', 'password' => 'password' 
       ) 
      ) 
     ) 
    ), 
    'Session', 
    'DebugKit.Toolbar' 
); 

以這種方式我沒有得到錯誤「模型沒有字段'用戶名'」但我的登錄被拒絕。 所以我換回到以前的配置,改變了表

ALTER TABLE users CHANGE COLUMN username email VARCHAR(45) NOT NULL UNIQUE; 

而且它的工作..所以這有什麼錯我以前的配置嗎?

+1

您顯示的查詢是必需的,因爲您正在更改'用戶名'專欄到'email',這正如你所描述的你想要的那樣?如果這是一個粘貼錯誤,並且實際上是另一種方式,請確保您的視圖也具有'User.email'輸入字段,而不是複製/粘貼教程中的User.username示例。 – Oldskool 2013-03-26 12:20:21

+0

我不明白爲什麼「身份驗證」配置沒有對用戶運行任何查詢來檢查憑據並立即拒絕身份驗證 – kappa 2013-03-26 13:37:38

回答

0

好,感謝@Oldskool提示我恢復了

public $components = array(
    'Acl', 
    'Auth' => array(
     'authorize' => array(
      'Actions' => array('actionPath' => 'controllers') 
     ), 
     'authenticate' => array(
      'Form' => array(
       'fields' => array(
        'username' => 'email', 'password' => 'password' 
       ) 
      ) 
     ) 
    ), 
    'Session', 
    'DebugKit.Toolbar' 
); 

然後,我改變登錄視圖太(用電子郵件代替用戶名):

echo $this->Form->inputs(array(
    'legend' => __('Login'), 
    'email', 
    'password' 
)); 

我以爲登錄表單進行管理通過auth組件而不是用戶模型,並且用戶名和電子郵件之間的映射僅在Auth組件配置中完成

+0

您在視圖中使用的字段名應該幾乎總是與數據庫中使用的字段名匹配,所以這現在應該做的伎倆。 – Oldskool 2013-03-26 14:47:48

+0

這很明顯,我只是認爲他們是由登錄pahse中的Auth組件管理的,但我錯了:) – kappa 2013-03-26 15:24:12