Ruby
devise
RubyOnRails

RailsでDevise使用時にメール認証をスキップする

Deviseでconfirmableを設定していると、管理対象のモデルを保存する際にメール認証が挟まれる。だが、場合によってはメール認証を飛ばしてメールアドレスを保存したい場合があったため、方法を調べてみた。

なお、ここでは便宜上Devise管理対象のモデルをUserとする。

新規登録時

次のようにskip_confirmation!メソッドを利用する。

user = User.new(params)
user.skip_confirmation!
user.save

更新時

次のようにskip_reconfirmation!メソッドを利用する。

user = User.find(user_id)
user.skip_reconfirmation!
user.save

蛇足

普通にググった限りだと、新規登録時の方法は載っていたのだが、それが更新時も使えると思ってやってみたら上手く行かなかった。Deviseのソースコードを読んでみると、skip_confirmation!confirmed_atに現在時刻を設定するだけのメソッドだった。そりゃ新規登録時しか使えないわけだ。

で、before_updateから処理を追ってみると、スキップしてくれそうなフラグが出てきたので検索してみると、skip_reconfirmation!に辿り着いたという顛末だ。

地味にハマったので、備忘録がてら記しておく。