おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

Railsの認証プラグイン Authlogic について

READMEを意訳&気になったところを調べてざっくりとまとめました。自分用のメモです。

基本的に

  • ログイン/ログアウトの状態を管理するセッション
  • ユーザモデルへの認証機能の追加

の二つの機能が定義されている。

ログイン/ログアウトの状態を管理するセッション

まずは、

class UserSession < Authlogic::Session::Base
end

のように、Authlogic::Session::Baseを継承させたモデルを作る

ログイン方法

モデルみたいに、createやsaveメソッドでログインすることが出来る。

UserSession.create(:login => "bjohnson", :password => "my password", :remember_me => true)
session = UserSession.new(:login => "bjohnson", :password => "my password", :remember_me => true); session.save
UserSession.create(:openid_identifier => "identifier", :remember_me => true) # requires the authlogic-oid "add on" gem
UserSession.create(my_user_object, true) # skip authentication and log the user in directly, the true means "remember me"

上記のようにするだけで、ログイン管理に必要な値をsessionに残すことが出来る。

ログイン情報の取得

ログイン後に、別のリクエストでログイン情報を使いたいときは下記のようにする

session = UserSession.find

ログアウトの方法

下記のようにしてログアウトできる。

session = UserSession.find
session.destroy

ユーザモデルへの認証機能の追加

認証の機能をUserモデルに追加するには下記のようにする(別にAccountモデルとかでもいい)

class User < ActiveRecord::Base
  acts_as_authentic do |c|
    c.my_config_option = my_value
  end # blockはオプション
end

宣言するだけで、レコードを保存する際にカラム名を見て自動でvalidationをしてくれる。カラム名authlogicが定義しているものか、ブロック内で設定したカラム名を定義しておく必要がある。loginカラムにはvalidateするけどemailカラムはvalidateしない等の設定もブロック内で可能。

細かい設定に関してはrdoc内の関連する項目を個別に見ていくしかないみたい。例えばloginカラムの設定を変更したければ Authlogic::ActsAsAuthentic::Login::Config を見るといい。

セッションの自動作成/更新機能

下記のようにしてユーザの登録が成功したときに自動でログインする。(この機能はオフにすることも出来る)

User.create(params[:user])

また、ユーザがパスワードを変えたときにはsessionを自動で更新する。

Rails3で使うには

今のところ、authlogicをRails3で使うためにはGemfileで下記のような記述をすると良いです。

gem "authlogic", :git => "git://github.com/odorcicd/authlogic.git", :branch => "rails3"