Hatena::Groupcatalyst

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

2007-08-06

[][]Catalyst::Plugin::Authenticationが変わっている Catalyst::Plugin::Authenticationが変わっている - LAPISLAZULI HILL#Catalyst を含むブックマーク はてなブックマーク - Catalyst::Plugin::Authenticationが変わっている - LAPISLAZULI HILL#Catalyst Catalyst::Plugin::Authenticationが変わっている - LAPISLAZULI HILL#Catalyst のブックマークコメント

ひさしぶりにCatalystをさわっている.id:vkgtaroさんにC::P::Authenticationが少し変更されていることを教えてもらった.自分で作っている分はいままでのようにひとつの認証方法を使っていて,詳しく見ていないのだけどこのあたりの変更がぱっと見える

  • loginメソッドからauthenticateメソッドに変更になっていて,引数にrealmが追加されている
  • 複数の認証方法を設定で書くことで,引数にrealmを設定して複数の認証方法をAuthenticationの仕組みで扱える
  • Authentication::StoreやAuthentication::Credentialはいままで,Pluginで指定をしていたけどconfigで設定するようになっている
  • Authentication::Store::DBICAuthentication::Store::DBIx::Class に変わっている(Authentication::Storeの仕組みが変わっているのか)

ユーザ認証が柔軟に設定できるようになったような気がします.気が向いたらもう少し詳しく調べてみます


新しいやり方への変更

Authentication::Store::DBICとAuthentication::Credential::Passwordを使っていたやり方を新しいやり方に変えてみた.新しい部分はあまり使っていないのでそれほど参考になる訳じゃないけど

0.10からは

lib/MyApp.pm

    use Catalyst qw/
        Authentication
    /;

というようにPlugin設定をして

myapp.yml

---
name: MyApp
authentication:
  default_realm : 'members'
  realms:
    members:
      credential:
        class: Password
        password_field: password
        password_type: hashed
        password_hash_type: SHA-1
      store:
        class: 'DBIx::Class'
        user_class: 'DBIC::User'
        id_field: 'username'

ここでstoreやCredentialなどを設定.storeがAuthentication::Store::DBICからAuthentication::DBIx::Classに変更になっている

lib/MyApp/Controller/login.pm

    if( $c->authenticate( {username => $username,
                           password => $password } )) {
        #login success
    }
    else {
        #login incorrect
    }

メソッドがログインからauthenticateに変わっている.loginもまだ使えるけど非推奨になっている

(追記)

$c->authenticateの第1引数は,実際に認証のために投げるクエリの条件です.いつもusernameとpasswordではなくカラム名にあわせる必要があります.たとえばログインidにメールアドレスが入っているemailというカラムを使うなら,こう書きます

    if( $c->authenticate( {email    => $email,
                           password => $password } )) {
        #login success
    }
    else {
        #login incorrect
    }