【Rails】Deviseに招待機能をつける
DeviseInvitable
「友人を招待」はもちろん,「サインアップ機能は除きたいけど新規ユーザ作成は必要」な場合(e.g. Adminの追加)を実現したい.
ほぼRailsのデファクトスタンダードとも言えそうなDevise gemであるが,そのままだとencrypted_password
が必須だったりするのでちょっと厄介.
そこでDeviseInvitable gemを利用すれば簡単に実装できる.
usage
ちょっとカラム増やしたりして…
def change add_column :users, :invitation_token, :string add_column :users, :invitation_created_at, :datetime add_column :users, :invitation_sent_at, :datetime add_column :users, :invitation_accepted_at, :datetime add_column :users, :invitation_limit, :integer add_column :users, :invited_by_id, :integer add_column :users, :invited_by_type, :string add_index :users, :invitation_token, unique: true end
ちょっとnull
をOKにしてみて…
def change change_column :users, :encrypted_password, :string, null: true change_column :users, :password_salt, :string, null: true end
invitable
moduleと有効期間(invite_for
)を追加する.
class User < ActiveRecord::Base # 省略 devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :invitable, invite_for: 2.weeks # 省略 end
おわり.
あとは招待メール送るためのviewとroutingが用意される(/invitations/new
)ほか,
自前のView使いたいときは以下のようにするだけで招待メールが送信される.
User.invite!(email: 'izumin5210@example.com', name: 'Masayuki IZUMI')
i18nもちゃんと用意されてる.
en: devise: invitations: send_instructions: 'An invitation email has been sent to %{email}.' invitation_token_invalid: 'The invitation token provided is not valid!' updated: 'Your password was set successfully. You are now signed in.' mailer: invitation_instructions: subject: 'You got an invitation!' user_subject: 'You got a user invitation!'
らくちんで良い.
ゆくゆくはDeviseみたいな「gemを拡張するためのgem」が出てくる,かっちょいいgem作れるようになりたい.
- 作者: すがわらまさのり,前島真一,近藤宇智朗,橋立友宏
- 出版社/メーカー: 技術評論社
- 発売日: 2014/06/06
- メディア: 大型本
- この商品を含むブログ (7件) を見る
Ruby on Rails 4 アプリケーションプログラミング
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2014/04/11
- メディア: 大型本
- この商品を含むブログ (2件) を見る