追記
OpenID対応前までをちゃんとやった。
本文
Restful Authentication with all the bells and whistlesにしたがうと、ザリガニが見ていた...。:railsforumのrestful_authenticationは素晴らしい!それを見てRESTfulの理解も深まるで紹介されているような機能ができるらしい。
- aGitHub: ctivefx's restful_authentication_tutorial at master
- Restful Authentication with all the bells and whistles (new 9/05/08)
- 「railsでhogehogeを作ってみる。」さんの関連記事を参考にチャレンジ
Restful Authentication with all the bells and whistles (new 9/05/08)#246がスタートみたいなのでここからスタートしてみる。
% rails myproject -d mysql % cd myproject % ruby script/plugin install http://svn.techno-weenie.net/projects/plugins/restful_authentication/
restful_authenticationを使ってセッション管理を作成。
% ruby script/generate scaffold Page title:string body:text % ruby script/generate authenticated user sessions --include-activation
config/initializersにmail.rbというファイルを作成。例が載っているのでそれいしたがって作成してみる。以下を変更。
# Email settings ActionMailer::Base.delivery_method = :smtp ActionMailer::Base.smtp_settings = { :address => "mail.yourapplication.com", :port => 25, :domain => "yourapplication.com", :authentication => :login, :user_name => "mail@yourapplication.com", :password => "yourapplicationpassword" }
次に、config/environment.rbの"Rails::Initializer.run do |config|"の後ろの行に"config.active_record.observers = :user_observer"を付け加える。これによって登録やアクティベーションが終わった後にメールが利用者に送られるようになるらしい。
次にapp/model/user_mailer.rbを修正する。パスワードの再発行を付け加えるみたい。
% diff user_mailer.rb.org user_mailer.rb 5,7c5,7 < < @body[:url] = "http://YOURSITE/activate/#{user.activation_code}" < --- > > @body[:url] = "http://localhost:3000/activate/#{user.activation_code}" > 9c9 < --- > 13c13 < @body[:url] = "http://YOURSITE/" --- > @body[:url] = "http://localhost:3000/" 15c15,26 < --- > > def forget_password(user) > setup_email(user) > @subject += 'You have requested to change your password' > @body[:url] = "http://localhost:3000/reset_password/#{user.password_reset_code}" > end > > def reset_password(user) > setup_email(user) > @subject += 'Your password has been reset' > end > 19,20c30,31 < @from = "ADMINEMAIL" < @subject = "[YOURSITE] " --- > @from = "hogehoge@jp" > @subject = "YourApplication - "
続いて、app/model/user_observer.rbを編集。user_mailer.rbの変更に対応。
% diff user_observer.rb.org user_observer.rb 7c7 < --- > 9c9,10 < --- > UserMailer.deliver_forgot_password(user) if user.recently_forgot_password? > UserMailer.deliver_reset_password(user) if user.recently_reset_password?
続いて役割と実行権限を付け加える。
% ruby script/generate scaffold Role rolename:string % ruby script/generate model Permission
db/migrateにあるXXX_create_permissions.rbを編集。adminを用意する。
diff 20090209105435_create_permissions.rb.org 20090209105435_create_permissions.rb 4c4 < --- > t.integer :role_id, :user_id, :null => false 6a7,21 > #Make sure the role migration file was generated first > Role.create(:rolename => 'administrator') > #Then, add default admin user > #Be sure change the password later or in this migration file > user = User.new > user.login = "admin" > user.email = "info@yourapplication.com" > user.password = "admin" > user.save(false) > user.send(:activate!) > role = Role.find_by_rolename('administrator') > permission = Permission.new > permission.role = role > permission.user = user > permission.save(false) 10a26,27 > Role.find_by_rolename('administrator').destroy > User.find_by_login('admin').destroy
XXX_create_users.rbを編集する。
% diff 20090209102704_create_users.rb.org 20090209102704_create_users.rb 14c14,15 < --- > t.column :password_reset_code, :string, :limit => 40 > t.column :enabled, :boolean, :default => true
app/modelのファイルを修正し、モデル間の依存関係を定義する。まずは、role.rb
% diff role.rb.org role.rb 1a2,3 > has_many :permissions > has_many :users, :through => :permissions
次、permission.rb。この微妙な単数と複数形の違いは難しい。
% diff permission.rb.org permission.rb 1a2,3 > belongs_to :user > belongs_to :role
続く。