35歳からの中二病エンジニア

社寺・鉄道・アニメを愛でるウェブ技術者の呟き

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! に辿り着いたという顛末だ。

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