1

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

#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,但它没有用。我查看了文档,但似乎找不到任何内容。有谁知道我可以做到这一点的方法吗?谢谢!

4

1 回答 1

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
        }   

比我必须使用用户的新列名调用身份验证方法:

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

就这样!

于 2013-02-04T14:39:54.020 回答