2013-02-04 2 views
0

J'essaie d'utiliser DBIx::Class pour les utilisateurs d'authentification de l'application Catalyst. Mes étapes que j'ai fait:Impossible d'utiliser DBIx :: Class pour l'authentification à partir de l'application Catalyst

1) créé SQLite db

CREATE TABLE people (
id integer primary key, 
name text not null, 
password text not null); 

2) créé modèle Catalyst personnes;

3) mis en place config auth dans MyApp.pm

__PACKAGE__->config('Plugin::Authentication' =>  { 
default => { credential => { 
       class => 'Password', 
       password_field => 'password', 
       password_type => 'clear' 
        },   
        store => { 
       class => 'DBIx::Class', 
       user_model => 'People'   
        } 
       } 
    } 
); 

4) du contrôleur Crée Auth et un procédé mis en connexion dans le:

sub login : Local { 
    my ($self, $c) = @_; 

    if (my $user = $c->req->params->{user} and my $password = $c->req->params->{password}) { 
     if ($c->authenticate({ username => $user, password => $password })) { 
      $c->res->body("hello " . $c->user->get("id")); 
     } else { 
      # login incorrect 
      $c->res->body("Wrong pass or name!"); 
     } 
    } else { 
     # invalid form input 
     $c->res->body("Type name & pass"); 
    } 
} 

5) appelé connexion de la méthode quand une forme avec l'utilisateur et les données de mot de passe sont soumises. Et je suis arrivé ce message:

exception Pris dans MyApp :: Controller :: Auth> login « Impossible de localiser la méthode objet "result_source" via paquet "MyApp :: Model :: People" à /usr/local/share/perl/5.14.2/Catalyst/Authentification/Store/DBIx/Class/User.pm ligne 35, ligne 999. "

Comment peut-il être fixé?

Répondre

0

Il y a un comportement étrange de l'assistant Catalyst lorsqu'il est utilisé pour créer le modèle DBIC. Si le nom du modèle et le nom de la table sont identiques, alors l'assistant créera une classe Result avec un autre nom. Pas le nom de la table de la base de données mais ce sera un autre. Par conséquent, il est nécessaire d'utiliser le nom de classe de résultat avec le nom de Modèle comme ceci: store => { class => 'DBIx::Class', user_model => 'People::Person' }

P.S. Le nom de la personne a été choisi automatiquement par l'assistant Catalyst.

0

Les documents Catalyst::Authentication::Store::DBIx::Class indiquent que le modèle utilisateur doit être complet, MyApp :: ModelName :: People dans votre cas.

Lisez également les documents Catalyst::Model::DBIC::Schema sur l'intégration d'un schéma DBIx :: Class dans une application Catalyst en tant que modèle.

+0

"' store => {classe => 'DBIx :: Class', user_model => 'MyApp :: Users', role_column => 'rôles',}}}); ' Le système d'authentification fonctionne dans les coulisses pour charger vos données à partir de la nouvelle source.Le reste de votre application est complètement inchangé. " Ceci vient de l'homme de Catalyst :: Plugin :: Authentication. – edem

0

@edem Je pense que c'est parce que vous n'avez pas créé la classe de résultats people.pm et défini la structure de la table.

Questions connexes