🕌

【Rails×devise】例外的にメール確認なしでユーザを登録する

2023/03/12に公開

deviseのconfirmableがONだが、例外的に確認メールを飛ばすことなくユーザ登録をしたい、というケースに遭遇した。

結論:skip_confirmation!を利用する

調べてみたところ、deviseのskip_confirmation!を利用するのが良さそう。

  exceptional_user = User.new(name: 'exceptional user')
  exceptioanl_user.skip_confirmation!
  exceptional_user.save!

そもそもconfirmableがONの時は、confirmed_atがnilであればメールを飛ばす処理が仕込まれている。つまり、confirmableをオンにした状態で確認メール送信をしたくない時は、新規Userを作成する時にconfirmed_atに値を入れれば良い。

そのための仕組みとしてdeviseが用意してくれているのがskip_confirmation!で、これはconfirmed_atに現在のUTC時刻を入れるメソッド。これを挟むことでメールが飛ばなくなる。

https://github.com/heartcombo/devise/blob/main/lib/devise/models/confirmable.rb#L153-L157

https://stackoverflow.com/questions/7465467/devise-create-user-account-with-confirmed-without-sending-out-an-email

https://qiita.com/Coolucky/items/30884d93db7afca2b2c7

Discussion