2011-09-06
Rails3 devise_invitableでDeviseにユーザ招待機能を追加する
Gemのインストール
RubyGemsにあるバージョンだと新しいdeviseだと使えませんので、ドキュメントの通りに古いdeviseを指定します。
gem 'devise', '~>1.2.0' gem 'devise_invitable', '~> 0.4.0'
$ bundle install
Gitのソースを直接指定すれば1.4でも使えます。
gem 'devise', '1.4.2' gem 'devise_invitable', :git => "https://github.com/scambra/devise_invitable.git"
$ bundle install
Deviseのセットアップ
前回の記事「Rails3アプリにDeviseで簡単に認証システムを組み込む」の「Railsプロジェクトにインストール」を参考にDeviseをインストールしてください。
devise_invitableのインストール
Wikiには、自動インストールと手動インストールの2通りが紹介されていますが、ここでは自動インストールを試しました。
$ rails generate devise_invitable:install
insert config/initializers/devise.rb
create config/locales/devise_invitable.en.yml
「rails generate devise_invitable MODEL」MODELのところを招待につかうモデル名に変えて実行します。
Userの場合は以下の通り
$ rails generate devise_invitable User
insert app/models/user.rb
invoke active_record
create db/migrate/20110906110900_devise_invitable_add_to_users.rb
自動インストールで、実行される内容は、Wikiの「Manual installation」の節の通りです。
db:migrateします。
$ reke db:migrate
以上で、セットアップは終了です。
招待する
招待はUser.inviteメソッドを呼び出します。
User.invite!(:email => "new_user@example.com", :name => "John Doe")
この時、他の属性もハッシュで指定できます。
また、「/users/invitation/new」にアクセスするとデフォルトの招待ページが表示されます。
以降は、各種オプションの設定について解説します。
Deviseに追加される設定
- invite_for: 招待のトークンの有効期限を設定します。デフォルトは0です。
オプションはUserモデルに以下の用に追加します。
devise :invitable, :database_authenticatable, :registerable,:confirmable,
:recoverable, :rememberable, :trackable, :validatable, :invite_for => 2.weeks
- invitation_limit: 各ユーザが招待可能な人数のリミットを指定します。デフォルトはリミットなしです。
- invite_key: 招待を送ったユーザを識別するキー、デフォルトはメールアドレス。
- validate_on_invite: 「force a record to be valid before being actually invited.」招待する前にレコードを確認済みにしてしまう? 試してないのでなんとも。
- resend_invitation: 招待を再送できるかどうか。デフォルトは再送可能。
Viewのカスタマイズ
以下のコマンドで標準のビューをプロジェクトにコピーして編集します。
$ rails generate devise_invitable:views
create app/views/devise/invitations
create app/views/devise/invitations/edit.html.erb
create app/views/devise/invitations/new.html.erb
create app/views/devise/mailer
create app/views/devise/mailer/invitation_instructions.html.erb
- invitations/edit.html.erb: コンファームメールのリンクをクリックして、accept処理の後に表示されるパスワード設定画面
- invitations/new.html.erb: 招待ページ
- mailer/invitation_instructions.html.erb: 招待メールの文面
メールのタイトルは以下のファイルにあります。(2011年11月15日追記)
- config/locales/devise_invitable.en.yml
Controllerのカスタマイズ
Devise::InvitationsControllerを継承したコントローラを作成し、routes.rbのdevise_forに指定します。
controller/usersに以下のクラスを作成した場合
class Users::InvitationsController < Devise::InvitationsController end
routes.rbは以下のように指定します。
devise_for :users, :controllers => { :invitations => 'users/invitations' }
独自のコントローラーを指定した場合は、パスが変わるので以下のコマンドでビューをコントローラに対応するパスにコピーします。
rails generate devise_invitable:views users
- 12 http://www.google.co.jp/url?sa=t&source=web&cd=1&ved=0CBkQFjAA&url=http://d.hatena.ne.jp/hrendoh/20110531/1306859707&rct=j&q=ubuntu rails3 11.04&ei=IqdlTqeAH8KhmQW-8qGtDw&usg=AFQjCNHZfTdtEdvznIfrRZtifw9rOwHrag
- 3 http://t.co/agIXy6n
- 3 http://www.google.co.jp/search?client=safari&rls=en&q=cakephp+conf&ie=UTF-8&oe=UTF-8&redir_esc=&ei=AXlnTr2tFMOAmQWQxdHZDA
- 3 http://www.google.co.jp/search?client=ubuntu&channel=fs&q=ubuntu+11.04+rvm&ie=utf-8&oe=utf-8&hl=ja
- 3 http://www.google.co.jp/url?sa=t&source=web&cd=1&ved=0CCoQFjAA&url=http://d.hatena.ne.jp/hrendoh/20110329&rct=j&q=mercurial AuthMySQLEnable&tbs=lr:lang_1ja&ei=8tllTs6OHYTGmAXU5MiiCg&usg=AFQjCNHCyrYf8O5pSiaNcaVkcROFs3BwlQ&sig2=e9cKY07F3u8djny
- 3 http://www.google.co.jp/url?sa=t&source=web&cd=2&ved=0CCAQFjAB&url=http://d.hatena.ne.jp/hrendoh/20110623/1308843444&rct=j&q=ubuntu jdbc&ei=f7llTtH1BuWImQWws7m6Cg&usg=AFQjCNEyiOLxyqqtCmKhf5e4LHtyv48m-g&cad=rja
- 2 http://d.hatena.ne.jp/
- 2 http://hignel.obic.co.jp/Hignel/Portal/Default.aspx
- 2 http://www.google.co.jp/
- 2 http://www.google.co.jp/search?aq=f&sourceid=chrome&ie=UTF-8&q=jetty+websocket

