Hatena::Groupcatalyst

LAPISLAZULI HILL#Catalyst このページをアンテナに追加 RSSフィード

2006-11-08

[][]Authenticationでパスワードの暗号化 Authenticationでパスワードの暗号化 - LAPISLAZULI HILL#Catalyst を含むブックマーク はてなブックマーク - Authenticationでパスワードの暗号化 - LAPISLAZULI HILL#Catalyst Authenticationでパスワードの暗号化 - LAPISLAZULI HILL#Catalyst のブックマークコメント

no title

書いてあるようにパスワードをSHA1ハッシュ化

myApp.yml

authentication:
  dbic:
    user_class: myApp::Model::DBIC::Users
    user_field: username
    password_field: password
    password_type: hashed
    password_hash_type: SHA-1

下2行追加.分ける必要なかったか…

[][]Authentication::Store::DBIC Authentication::Store::DBIC - LAPISLAZULI HILL#Catalyst を含むブックマーク はてなブックマーク - Authentication::Store::DBIC - LAPISLAZULI HILL#Catalyst Authentication::Store::DBIC - LAPISLAZULI HILL#Catalyst のブックマークコメント

no title

Page Not Found

サンプルのやり方を順番に試してみる,ちょっとだけいまの構造に合わせて,sekimuraさんの記事に合わせてアレンジ.userのdbもmysqlに置き換えただけでほぼ同じ.とりあえずパスワードも平文で,あとで暗号化を

myApp.yml

authentication:
  dbic:
    user_class: myApp::Model::DBIC::Users
    user_field: username
    password_field: password

myApp.pm

use Catalyst qw/
    ...
    Authentication
    Authentication::Store::DBIC
    Authentication::Credential::Password
/;

ログイン関連のコードはRoot.pmに書いてしまいました

まずlogin

sub login : Local {
    my ( $self, $c ) = @_;
    $c->stash->{template} = 'login.tt2';
}

do_login.loginメソッドはAuthentication::Credential::Passwordで用意されています

sub do_login : Local {
    my ( $self, $c ) = @_;
    my $username = $c->req->param('username') || '';
    my $password = $c->req->param('password') || '';

    if($username && $password) {

        if($c->login($username, $password)) {
            $c->res->redirect($c->uri_for('/hoge'));
            return;
        }
        else {
            $c->stash->{error_msg} = 'Bad username or Password';
        }

    }

    $c->stash->{template} = 'login.tt2';
}

微妙だけどlogin.tt2も

[% IF error_msg %]
<div class="error_info">
<ul>
<li>[% error_msg %]</li>
</ul>
</div>
[% END %]

<form action="/do_login" method="post">
  username:<br />
  <input name="username" type="text" value="" /><br />
  password:<br />
  <input name="password" type="password" /></br />
  <input type="submit" value="login" /><br />
</form>

logout.現状そんなに意味はないけど

sub logout : Local {
    my ( $self, $c ) = @_;
    $c->logout;

    $c->res->redirect($c->uri_for('/'));
}

ログインが成功すれば/hogeにリダイレクト,失敗したら戻る.とりあえず認証自体はできるようになった.あとはpasswordなどの暗号化,sessionとAuthenticationの連携をやる必要がある

[][]Session::FastMmap Session::FastMmap - LAPISLAZULI HILL#Catalyst を含むブックマーク はてなブックマーク - Session::FastMmap - LAPISLAZULI HILL#Catalyst Session::FastMmap - LAPISLAZULI HILL#Catalyst のブックマークコメント

no title

Page Not Found

このあたりを参考にひとまず単体で使うだけやってみる

myApp.yml

session:
  expires: 3600
  rewrite: 0
  storage: '/tmp/session'

expiresの値はyamlで設定するなら数値で指定する必要があるみたい.たとえば60 * 60のような書き方ではダメでした


myApp.pm

use Catalyst qw/
    ...
    Session::FastMmap
/;

と設定.あとは適当なContorllerで

    $c->session->{hoge} = 'hoge';

とセットしてやって,別のところで

    my $hoge = $c->session->{hoge};

などとして呼び出せる

これだけでもcookieにsessionidが保存される

[debug] Found sessionid "munyamunya" in cookie
[debug] Found session "munyamunya"

あとはexpiresの値を調整したりして動作を確認してみた.expiresが過ぎればsessionidが発行し直されます

トラックバック - http://catalyst.g.hatena.ne.jp/lapis25/20061108