catalyst:auth
Authentication and Authorization
Catalystで認証と認可の処理を行う。ユーザ情報はLDAP、データベース、.htpasswd等に格納できる。ここではハローワールド作成でDBICをモデルとして使ったので認証にもDBICを利用する方法を記述する。LDAP認証を後で試すかも。
セッション管理
以下のプラグインをインストール
${APP_ROOT}/lib/Hoge.pmを修正してプラグインを読み込む。
use Catalyst qw/ ... Session Session::Store::FastMmap Session::State::Cookie ... /;
認証、認可の処理
以下のプラグインをインストール
- DBIxをCatalystで使うためのモジュール
- Catalyst::Plugin::Authentication::Store::DBIx::Classore::DBIx::Class
ユーザテーブルの作成
CREATE TABLE users ( id INTEGER NOT NULL AUTO_INCREMENT, username VARCHAR(255) NOT NULL, ROLE VARCHAR(255) NOT NULL, password VARCHAR(255), PRIMARY KEY (id), UNIQUE (username) ) CHARACTER SET utf8 TYPE=innoDB;
yamlに設定を記述
authentication: default_realm: 'members' realms: members: credential: class: 'Password' password_field: 'password' password_type: 'clear' store: class: 'DBIx::Class' user_class: 'DBIC::Users' id_field: 'username' role_column: 'role'
${APP_ROOT}/lib/Hoge.pmを修正してプラグインを読み込む。
use Catalyst qw/ ... Authentication Authorization::Roles ... /;
ログイン処理コードの例
sub index : Private { my ( $self, $c ) = @_; if ($c->user_exists) { $c->req->action(undef); $c->res->redirect($c->uri_for("/admin/index")); } else { $c->stash->{message} = 'ログインしてください'; $c->stash->{template} = 'auth/index.tt'; } } sub login : Local { my ($self, $c) = @_; # 生パスワードを保存するのはキケンなので止めましょう $c->authenticate({ username => $c->req->param("username"), password => $c->req->param("password") }); if ($c->user_exists) { $c->req->action(undef); $c->res->redirect($c->uri_for("/admin/index")); } else { $c->stash->{message} = 'ユーザ名、またはパスワードが違います'; $c->stash->{template} = 'auth/index.tt'; } } sub logout : Local { my ($self, $c) = @_; $c->logout; $c->stash->{message} = 'ログアウトしました'; $c->stash->{template} = 'auth/index.tt'; } sub end : Private { my ($self, $c) = @_; $c->forward($c->view('TT')) unless ($c->response->body or $c->response->redirect); }
ログインが必要なコントローラのbeginに以下の記述を追加
sub begin : Private { my ($self, $c) = @_; unless($c->check_user_roles("hogehoge")) { $c->req->action(undef); # これを書かないと本来のアクションが呼ばれてしまう。 $c->detach("/auth/"); # ログイン画面に飛ばす } }
catalyst/auth.txt · 最終更新: 2007/11/19 01:20 by 127.0.0.1