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の man からの引用:

id_field

ほとんどの場合、この構成変数を設定する必要はありません。Catalyst::Authentication::Store::DBIx::Class が独自にユーザー テーブルの主キーを決定するからです。デフォルトを上書きする必要がある場合、またはユーザー テーブルに複数の主キーがある場合、id_field には、ユーザーの復元に使用する列名を含める必要があります。この列の特定の値は、データベース内の 1 人のユーザーに対応している必要があります。

だからあなたはこれをしなければなりません:

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 に答える