0

DBIx::ClassCatalyst アプリからの認証ユーザーに使用しようとしています。私が行った私の手順:

1) SQLite データベースを作成

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

2) Catalyst モデル People を作成しました。

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) コントローラー認証を作成し、その中にメソッド ログインを設定します。

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) ユーザーとパスワードのデータを含むフォームが送信されると、login メソッドが呼び出されます。そして、私はこのメッセージを受け取りました:

/usr/local/share/perl/5.14.2/Catalyst/ で、MyApp::Controller::Auth->login で「パッケージ "MyApp::Model::People" を介して "オブジェクト メソッド "result_source" が見つかりません」で例外をキャッチしましたAuthentication/Store/DBIx/Class/User.pm 行 35、行 999."

どうすれば修正できますか?

4

3 に答える 3

0

@edemこれは、people.pm結果クラスを作成してテーブル構造を定義していないためだと思います。

于 2013-02-06T05:32:32.307 に答える
0

Catalyst::Authentication::Store::DBIx::Classのドキュメントでは、user_model が完全に修飾されている必要があると述べています。 MyApp::ModelName::People の場合。

DBIx::Class スキーマをモデルとして Catalyst アプリケーションに統合する方法については、 Catalyst::Model::DBIC::Schemaのドキュメントもお読みください。

于 2013-02-04T20:33:20.390 に答える
0

There is strange behave of Catalyst helper when use it to create model DBIC. If the model name and table name the same then helper will create a Result class with other name. Not the name of database table but it will be another one. Therefore is needed to use the name of Result class with name of Model like this: store => { class => 'DBIx::Class', user_model => 'People::Person' }

P.S. Person name was chosen automatically by Catalyst helper.

于 2013-02-05T00:39:47.897 に答える