2013-02-04 28 views
0

我正在尝试使用DBIx::Class从Catalyst应用程序进行身份验证用户。 我的步骤我做:无法使用DBIx :: Class从Catalyst应用程序进行身份验证

1)创建的SQLite数据库

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

2)建立催化剂型号的人;

3)设置在MyApp.pm

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

4)创建控制器验证AUTH配置和设置方法的登录在它:

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)调用的方法的登录时与用户的形式组织并提交密码数据。在MyApp的

捕捉到异常::控制器:: Auth->登录“无法找到 对象的方法‘result_source’通过一揽子‘MyApp的::型号::人’在 /:我得到这个消息usr/local/share/perl/5.14.2/Catalyst/Authentication/Store/DBIx/Class/User.pm line 35,line 999.“

如何解决?

回答

0

当使用它来创建模型DBIC时,Catalyst助手有一种奇怪的行为。如果模型名称和表名称相同,则助手将使用其他名称创建一个Result类。不是数据库表的名称,但它将是另一个名称。因此需要使用名称为Model的Result类的名称,如下所示:store => { class => 'DBIx::Class', user_model => 'People::Person' }

P.S.人员名称是由Catalyst helper自动选择的。

0

Catalyst::Authentication::Store::DBIx::Class docs指出user_model必须是全限定的,MyApp :: ModelName :: People就是你的情况。

另请阅读Catalyst::Model::DBIC::Schema关于如何将DBIx :: Class模式作为模型集成到Catalyst应用程序的文档。

+0

“'store => {class =>'DBIx :: Class',user_model =>'MyApp :: Users',role_column =>'roles',}}});' 身份验证系统在幕后工作从新源加载数据,其余应用程序完全不变。“这是来自Catalyst :: Plugin :: Authentication的人。 – edem

0

@edem我想,这是因为您还没有创建people.pm结果类并定义了表结构。

相关问题