以下を参考に導入してみた.
##Installation プラグインのインストール
% ruby script/plugin discover
% ruby script/plugin install acts_as_authenticated
##UserモデルとAccountコントローラの作成
% ruby script/generate authenticated user account
% vim config/database.yml
% rake db:migrate
##authenticated_mailerのセットアップ 対応するモデル(User)を指定.
% ruby script/generate authenticated_mailer user
メールサーバの指定などを追加
vim config/environments/development.rb
ActionMailer::Base.smtp_settings = {
:address => 'smtp server',
:port => 25,
:user_name => 'username',
:password => 'password',
:authentication => :plain
}
app/models/user_notifier.rb -> setup_emailメソッド内のインスタンス変数を変更
@from
@subject
@body[:user]
##Userモデルの変更 ###Schemaの変更
% ruby script/generate migration AddActivationToUser
% vim db/migrate/002_add_activation_to_user.rb
class AddActivationToUser < ActiveRecord::Migration
def self.up
add_column :users, :activation_code, :string, :limit => 40
add_column :users, :activated_at, :datetime
end
def self.down
remove_column :users, :activation_code
remove_column :users, :activated_at
end
end
% rake db:migrate
###Userモデルの変更 下記メソッドを追加
class User < ActiveRecord::Base
before_create :make_activation_code
# loginと非暗号のパスワードから認証し、userかnilを返す
def self.authenticate(login, password)
# activated_atがnullではない
u = find(:first, :conditions => ['login = ? and activated_at IS NOT NULL', login])
u && u.authenticated?(password) ? u : nil
end
# activateしてインスタンス変数を設定
def activate
@activated = true
update_attributes(:activated_at => Time.now.utc, :activation_code => nil)
end
# インスタンス変数を返す
def recently_activated?
@activated
end
protected
# 有効化コードを生成する
def make_activation_code
self.activation_code = Digest::SHA1.hexdigest( Time.now.to_s.split(//).sort_by {rand}.join )
end
end
comments powered by Disqus