【Rails】devise_invitable 使ってみる

はじめに

業務でdevise_invitablegemを使っているプロジェクトがあるが、自分で実装したことはなかったためカスタマイズなしで手順を確認しました。

環境

  • Rails 7.0.8
  • ruby 3.2.2
  • devise 4.9.2
  • devise_invitable 2.0.8

前提

  • rails newした後にdeviseをインストールし、Userを作成。認証しているUserのみアクセスできるUser一覧画面のみ作成済
  • letter_openerを入れ、メールが確認できるように設定済

そこからdevise_invitableを導入する手順です。

手順

① gemfileに追加

gem 'devise_invitable'

② インストール

$ rails g devise_invitable:install

③ deviseで作成したモデルでinvitableが使えるようにする

$ rails g devise_invitable User
$ rails db:migrate
  • マイグレーションファイルxxxxxxxxxx_devise_invitable_add_to_users.rbが作成される。invitableで使用するカラムがUsersテーブルに追加される
  • Userモデルにdevise :invitableが挿入される

この時点でrails routesで確認すると、invitationのパスが設定されている

$ rails routes
...
                  accept_user_invitation GET    /users/invitation/accept(.:format)                                                                devise/invitations#edit
                  remove_user_invitation GET    /users/invitation/remove(.:format)                                                                devise/invitations#destroy
                     new_user_invitation GET    /users/invitation/new(.:format)                                                                   devise/invitations#new
                         user_invitation PATCH  /users/invitation(.:format)                                                                       devise/invitations#update
                                         PUT    /users/invitation(.:format)                                                                       devise/invitations#update
                                         POST   /users/invitation(.:format)                                                                       devise/invitations#create

④ viewを作成

rails g devise_invitable:views

invoke  DeviseInvitable::Generators::MailerViewsGenerator
exist    app/views/devise/mailer
create    app/views/devise/mailer/invitation_instructions.html.erb
create    app/views/devise/mailer/invitation_instructions.text.erb
invoke  simple_form_for
create    app/views/devise/invitations
create    app/views/devise/invitations/edit.html.erb
create    app/views/devise/invitations/new.html.erb

⑤ ユーザーを作成してみる

Userモデルからinviteメソッドを使用して、Userを作成しつつ招待メールを送信。

$ rails c
> User.invite!(email: 'makky@example.com')

inviteメソッドから招待メールが送信される

招待リンクから遷移するとパスワード入力が入力できる

パスワードを設定して、rootに設定したページに遷移

Userが作成され、ログイン済になった!