0

我正在尝试使用DBIx::Class来自 Catalyst 应用程序的身份验证用户。我已经完成的步骤:

1) 创建 SQLite 数据库

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

2) 创建了 Catalyst 模型 People;

3) 在 MyApp.pm 中设置 auth 配置

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

4)创建控制器身份验证并在其中设置方法登录:

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::Controller::Auth->login “无法通过 /usr/local/share/perl/5.14.2/Catalyst/ 的包“MyApp::Model::People”定位对象方法“result_source”中捕获异常Authentication/Store/DBIx/Class/User.pm 第 35 行,第 999 行。”

如何修复?

4

3 回答 3

0

Catalyst::Authentication::Store::DBIx::Class文档声明 user_model 必须是完全合格的,在您的情况下是 MyApp::ModelName::People。

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

于 2013-02-04T20:33:20.390 回答
0

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

PS 人名由 Catalyst 助手自动选择。

于 2013-02-05T00:39:47.897 回答
0

@edem 我认为,这是因为您尚未创建 people.pm 结果类并定义表结构。

于 2013-02-06T05:32:32.307 回答