スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Rails3.1 + MongoID2.3.2 で 認証アドオン Authlogic3.1.0 を使う

Rails 3.1 + MongoID 2.3.2 で 認証アドオン Authlogic 3.1.0 を使う



Rails3.1 + Authlogic について

RDBの場合の設定方法については、詳しくは以下のサイトが参考になります。
認証プラグインAuthlogicを勉強してみた

MongoDB(MongoID)を使った場合の設定方法は、おおよそ皆さん以下のサイトを参考にしていると思います。
Authlogic with Mongoid (in spirit of http://pastie.org/503478)
が、バグがあってうまく動きませんので修正しました。

変更点は以下。
* primary_key 関数は、Authenticableのクラスメソッドではなくて、Userのクラスメソッドでなければならない。
* find_by_persistence_token メソッドの追加。
* include Authlogic::ActsAsAuthentic::LoggedInStatus の部分、エラーが取れませんでした。




app/models/authenticable.rb
module Authenticable
def self.included(model)
model.class_eval do
extend ClassMethods
include InstanceMethods

field :username
field :crypted_password
field :password_salt
field :persistence_token
field :login_count, :type => Integer, :default => 0
field :last_request_at, :type => DateTime
field :last_login_at, :type => DateTime
field :current_login_at, :type => DateTime
field :last_login_ip
field :current_login_ip

index :username
index :persistence_token
index :last_login_at

include Authlogic::ActsAsAuthentic::Base
# TODO: wrong number of arguments (2 for 1)
# include Authlogic::ActsAsAuthentic::LoggedInStatus
include Authlogic::ActsAsAuthentic::Login
include Authlogic::ActsAsAuthentic::MagicColumns
include Authlogic::ActsAsAuthentic::Password
include Authlogic::ActsAsAuthentic::PerishableToken
include Authlogic::ActsAsAuthentic::PersistenceToken
include Authlogic::ActsAsAuthentic::RestfulAuthentication
include Authlogic::ActsAsAuthentic::SessionMaintenance
include Authlogic::ActsAsAuthentic::SingleAccessToken
include Authlogic::ActsAsAuthentic::ValidationsScope
end

def model.primary_key
:_id
end
end

module ClassMethods
def <(klass)
return true if klass == ::ActiveRecord::Base
super(klass)
end

def column_names
fields.map &:first
end

def quoted_table_name
'users'
end

def default_timezone
:utc
end

def find_by__id(*args)
find *args
end

# Change this to your preferred login field
def find_by_username(username)
where(:username => username).first
end

def find_by_persistence_token(token)
where(:persistence_token => token).first
end

def with_scope(query)
query = where(query) if query.is_a?(Hash)
yield query
end
end

module InstanceMethods
def readonly?
false
end
end
end


app/models/user.rb
class User
include Mongoid::Document
include Mongoid::Timestamps

include Authenticable

acts_as_authentic do |config|
# Change this to your preferred login field
config.login_field = 'username'
config.merge_validates_uniqueness_of_login_field_options :scope => '_id', :case_sensitive => true
end
end


app/models/user_session.rb
class UserSession < Authlogic::Session::Base
def to_key
new_record? ? nil : [self.send(self.class.primary_key)]
end
end

スポンサーサイト

コメントの投稿

非公開コメント

検索フォーム
RSSリンクの表示
リンク
exabugsをフォローしましょう
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。