2009/12/11

Rails restful-authentication

Ruby on Rails の認証プラグイン restful-authentication を使うメモ。

参考サイト

インストール

script/plugin install git://github.com/technoweenie/restful-authentication.git

ジェネレート。引数は

  • ユーザとかアカウントとか言われるもののモデル
  • セッションコントローラ
  • RSpec のテストを生成
  • アクティベーションを使う
script/generate authenticated user sessions --rspec --include-activation
rake db:migrate
rake db:migrate RAILS_ENV=test

次のコードが config/routes.rb に自動的に追加されている。

map.logout '/logout', :controller => 'sessions', :action => 'destroy'
map.login '/login', :controller => 'sessions', :action => 'new'
map.register '/register', :controller => 'users', :action => 'create'
map.signup '/signup', :controller => 'users', :action => 'new'
map.resources :users
map.resource :session

が、アクティベーションのために

  map.activate '/activate/:activation_code', :controller => 'users', :action => 'activate', :activation_code => nil
も追加する。

users_controller.rb の次の行を application_controller.rb に移動する。

  # Be sure to include AuthenticationSystem in Application Controller instead
include AuthenticatedSystem

ログインが必要なアクションをコントローラで次のように指定する。指定したアクションを実行するとログイン画面に遷移するようになる。

before_filter :login_required, :only => [:new, :edit, :create, :update, :destroy]

アクティベーションメールのために、

config/environment.rb にオブザーバを追加。

  # result-authentication のアクティベーション用オブザーバ
config.active_record.observers = :user_observer

config/environments/development.rb でメールの設定。

config.action_mailer.delivery_method = :sendmail
config.action_mailer.raise_delivery_errors = true

次のファイルでメールの内容等を指定する。

  • app/models/user_mailer.rb
  • app/views/user_mailer/signup_notification.erb
  • app/views/user_mailer/activation.erb

これで http://localhost:3000/signup からサインアップするとメールが送信され、メールのリンクをクリックするとアカウントが使えるようになる。

:セキュリティ上の注意事項 config/initializers/site_keys.rb は秘密にしましょう。

0 件のコメント: