Develop with pleasure!

福岡でCloudとかBlockchainとか。

forgot_password with AuthLogic

パスワードのリマインダ機能を実装するのに、forgot_passwordを利用してみた。認証エンジンには、AuthLogicを使用している。

まず、プラグインをインストール。(事前にgitをインストールしておく必要がある。)

ruby script/plugin install git://github.com/greenisus/forgot_password.git


続いて、forgot_passwordジェネレータを利用して必要なファイルを生成する。

ruby script/generate forgot_password forgot_password user

第一引数のforgot_passwordがパスワードを管理するモデルで、第二引数のuserがユーザ情報を管理するモデルを指定する。

このジェネレータを実行することで下記ファイルが生成される。

  • app/models/forgot_password.rb
  • app/models/forgot_password_mailer.rb
  • app/controllers/forgot_passwords_controller.rb
  • app/helpers/forgot_passwords_helper.rb
  • app/views/forgot_passwords/new.html.erb
  • app/views/forgot_passwords/reset.html.erb
  • db/migrate/20090714044728_create_forgot_passwords.rb
  • app/views/forgot_password_mailer/forgot_password.html.erb
  • app/views/forgot_password_mailer/reset_password.html.erb


このうち、forgot_passwords_controller.rbのupdate_after_forgettingメソッド内の下記コードを削除する。

PasswordMailer.deliver_reset_password(@user)

あと、routes.rbにforgot_passwordにアクセスするための下記リソース定義が追記される。

map.forgot_password '/forgot_password', :controller => 'forgot_passwords', :action => 'new'
  map.change_password '/change_password/:reset_code', :controller => 'forgot_passwords', :action => 'reset'
  map.resources :forgot_passwords

新たにforgot_passwordsテーブルをDBに追加するため、rakeコマンドを実行する。

rake db:migrate

続いてdevelopment.rb等にActionMailerが使用するSMTPの設定情報を定義する。

config.action_mailer.raise_delivery_errors = true

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :address => 'SMTPのアドレスを定義',
  :port => SMTPポート,
  :domain => "hoge.jp"
}


最後に、ログインページあたりに、リンクを生成して遷移させるようにすれば一通り動作する。

<%= link_to 'パスワードを忘れた場合は?', forgot_password_path %>


結構、お手軽かつAuthLogicのUserモデルと疎な結合で実現できるので便利だ♪