Catalyst :: Plugin :: Authentication更改用户名字段

时间:2013-02-03 22:12:58

标签: perl authentication username catalyst

我在我的Catalyst::Plugin::Authentication应用中使用Catalyst进行用户身份验证,我希望能够更改用户身份验证时使用的用户名字段(目前默认为用户名) 。这是我目前的设置:

#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使用相同的功能,但它不起作用。我查看了文档,但我似乎无法找到任何内容。有谁知道我可以这样做的方式?谢谢!

1 个答案:

答案 0 :(得分:0)

Catalyst::Authentication::Store::DBIx::Class的人的引用:

  

<强> id_field

     

在大多数情况下,不需要设置此配置变量,因为Catalyst :: Authentication :: Store :: 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
        }   

比我必须使用用户的新列名称调用authenticate方法:

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

这就是全部!