2013-02-03 2 views
1

J'utilise Catalyst::Plugin::Authentication pour l'authentification de l'utilisateur dans mon application Catalyst, et je voudrais pouvoir changer le champ de nom d'utilisateur qu'il utilise lors de l'authentification des utilisateurs (actuellement il est par défaut Nom d'utilisateur). Voici mon actuel mis en place:Catalyst :: Plugin :: Authentification changer le nom d'utilisateur champ

#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', 
     } 
     } 
    } 
    }  
); 

Comme vous pouvez le voir, il y a une option pour définir le nom du champ de mot de passe, en définissant simplement password_field. J'ai essayé d'utiliser la même chose avec username_field, mais cela n'a pas fonctionné. J'ai regardé dans la documentation, mais je n'arrive pas à trouver quelque chose dessus. Est-ce que quelqu'un sait d'une manière que je pourrais faire ceci? Merci!

Répondre

0

La citation de l'homme de Catalyst::Authentication::Store::DBIx::Class:

id_field

Dans la plupart des cas, cette variable de configuration n'a pas besoin d'être défini comme catalyseur :: Authentification :: Boutique :: DBIx: : La classe déterminera la clé primaire de la table utilisateur par elle-même. Si vous devez remplacer la valeur par défaut ou si votre table utilisateur contient plusieurs clés primaires, id_field doit contenir le nom de la colonne qui doit être utilisé pour restaurer l'utilisateur. Une valeur donnée dans cette colonne doit correspondre à un utilisateur unique dans la base de données.

Vous devez faire ceci:

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 
     } 

que je dois appeler la méthode authentifie avec le nouveau nom de la colonne de l'utilisateur:

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

C'est tout!

+0

Mais je ne cherche pas à changer ce qu'il reconnaît comme la clé primaire, je veux changer comment 'Catalyst :: Plugin :: Authentication' par défaut recherche une colonne nommée' username' pour s'authentifier. – srchulo

+0

C'est vrai! Vous pouvez utiliser n'importe quelle colonne de votre table pour reconnaître un utilisateur NON SEULEMENT comme clé primaire. Essayez juste de le faire. – edem

Questions connexes