日常茶飯事的 Rails スケルトン
restful-authentication プラグインを使ってログインアプリケーション作る(1)
restful-authentication プラグインを使ってログインアプリケーション作る(2)
の内容をあわせたもの。
両サイトに多謝!!!
私オリジナルでは、ありませんよ!!
プロジェクトの作成
% rails sample
各種プラグイン
restful-authentication
% ruby script/plugin install git://github.com/technoweenie/restful-authentication.git
aasm
% ruby script/plugin install git://github.com/rubyist/aasm.git
forgot_password
% ruby script/plugin install git://github.com/greenisus/forgot_password.git
Generate
sessions_controller と user モデルを作成
% ruby script/generate authenticated user sessions --include-activation --aasm
passwords_controller と password モデルを作成
% ruby script/generate forgot_password password user
ソースの編集
vendor/plugins/restful-authentication/init.rb
require File.dirname(__FILE__) + '/lib/authentication' require File.dirname(__FILE__) + '/lib/authentication/by_password' require File.dirname(__FILE__) + '/lib/authentication/by_cookie_token' require 'aasm' require File.dirname(__FILE__) + '/lib/authorization/aasm_roles'
config/routes.rb
(省略) map.activate '/activate/:activation_code', :controller => 'users', :action => 'activate' (省略)
config/environment.rb
(省略) Rails::Initializer.run do |config| (省略) config.active_record.observers = :user_observer config.action_mailer.raise_delivery_errors = true config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { :address => 'SMTP サーバ', :port => 587, # or 25 :domain => 'ドメイン', :authentication => :login, :user_name => 'SMTP AUTH ユーザーID', :password => 'SMTP AUTH パスワード' } end $ADMIN_EMAIL = '管理者のメールアドレス' $SERVICE_URL = 'http://localhost:3000'
app/models/user_mailer.rb
class UserMailer < ActionMailer::Base def signup_notification(user) setup_email(user) @subject += 'Please activate your new account' @body[:url] = "#{$SERVICE_URL}/activate/#{user.activation_code}" end def activation(user) setup_email(user) @subject += 'Your account has been activated!' @body[:url] = "#{$SERVICE_URL}" end protected def setup_email(user) @recipients = "#{user.email}" @from = $ADMIN_EMAIL @subject = "[YOURSITE] " @sent_on = Time.now @body[:user] = user end end
app/models/password_mailer.rb
class PasswordMailer < ActionMailer::Base def forgot_password(password) setup_email(password.user) @subject += 'You have requested to change your password' @body[:url] = "#{$SERVICE_URL}/change_password/#{password.reset_code}" end def reset_password(user) setup_email(user) @subject += 'Your password has been reset.' end protected def setup_email(user) @recipients = "#{user.email}" @from = $ADMIN_EMAIL @subject = "[YOURSITE] " @sent_on = Time.now @body[:user] = user end end
app/controllers/application.rb
class ApplicationController < ActionController::Base (省略) include AuthenticatedSystem before_filter :login_required end
app/controllers/users_controller.rb
class UsersController < ApplicationController before_filter :login_required, :except => [ :new, :create, :activate, :suspend, :unsuspend, :destroy, :purge, ] (省略) end
app/controllers/sessions_controller.rb
class SessionsController < ApplicationController skip_before_filter :login_required (省略) end
ここで簡単なアプリを作るとよい
つまりscaffold
データベースとテーブルの作成
% rake db:create % rake db:migrate
ここまでで確認
メールアドレス変更
change_email
% ruby script/plugin install git://github.com/kusakari/change_email.git
valid-attributes
% ruby script/plugin install git://github.com/kusakari/valid_attributes.git
メールアドレス変更用のコードを自動生成
% ruby script/generate change_email email user
データベース
% rake db:migrate
メールの日本語対応
ActionMailerJa
% ruby script/plugin install git://github.com/kusakari/actionmailer_ja.git
app/models/user_mailer.rb
class UserMailer < ActionMailer::Base def signup_notification(user) setup_email(user) @subject += '新しいアカウントを有効にして下さい' @body[:url] = "#{$SERVICE_URL}/activate/#{user.activation_code}" end def activation(user) setup_email(user) @subject += 'アカウントが有効になりました' @body[:url] = "#{$SERVICE_URL}" end protected def setup_email(user) @recipients = "#{user.email}" @from = "TODOアプリケーション <#{$ADMIN_EMAIL}>" @subject = "[YOURSITE] " @sent_on = Time.now @body[:user] = user end end