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!
に辿り着いたという顛末だ。
地味にハマったので、備忘録がてら記しておく。