2013-02-03 25 views
1

我正在使用Catalyst::Plugin::Authentication進行用戶身份驗證,我的Catalyst應用中,我希望能夠更改用戶身份驗證用戶時使用的用戶名字段(目前默認爲用戶名)。這是我目前的設置:Catalyst :: Plugin ::身份驗證更改用戶名字段

#used for user authentication 
__PACKAGE__->config(
    authentication => { 
    default_realm => 'users', 
    realms  => { 
     users => { 
      credential => { 
       class   => 'Password', 
       password_field => 'password', 
       password_type => 'self_check' 
      }, 
     store => { 
      class   => 'DBIx::Class', 
      user_model => 'DB::User', 
      role_relation => 'roles', 
      role_field => 'name', 
     } 
     } 
    } 
    }  
); 

正如你所看到的,有設置密碼字段的名稱,只需通過設置password_field的選項。我試圖用username_field使用相同的東西,但它沒有奏效。我查看了文檔,但我似乎無法找到任何內容。有沒有人知道我可以做到這一點的方式?謝謝!

回答

0

從人的報價Catalyst::Authentication::Store::DBIx::Class

id_field

在大多數情況下,這種配置變量不需要進行設置,催化::認證::商店:: DBIx: :Class將自行確定用戶表的主鍵。如果您需要重寫默認值,或者您的用戶表具有多個主鍵,則id_field應包含應該用於還原用戶的列名稱。此列中的給定值應與數據庫中的單個用戶相對應。

所以,你必須這樣做:

store => { 
      class   => 'DBIx::Class', 
      user_model => 'DB::User', 
      role_relation => 'roles', 
      role_field => 'name', 
      id_field  => 'name_of_user' # A new name of column in your DB 
     } 

比我要打電話與用戶新的列名認證方法:

$c->authenticate({ name_of_user => $user, password => $password }); 

這一切!

+0

但是我不想改變它認定的主鍵,我想改變'Catalyst :: Plugin :: Authentication'的默認方式是尋找名爲'username'的列來驗證。 – srchulo

+0

沒錯!您可以使用表中的任何列來識別用戶不僅僅是主鍵。試着去做。 – edem