PIYO - Tech & Life -

deviseのskip confirmationの話

Rails gem devise

Railsのdeviseの話です。

deviseは使わない派、deviseは悪派な人も多いですが、deviseの標準的な範囲で使えそうならとりあえず使っちゃう派です。まあ、その辺の論争は置いといて。

(ユーザーを一括作成するなど)都合により認証メールを送らないでいるための方法と、認証メールとか関係なく認証済にしてしまう方法、それぞれ別の手段が提供されています。

コードをみれば一目瞭然ですが、こないだ開発中に「どっちだっけ?」となったので、メモっておこうかと思いました。

devise/confirmable.rb at master · heartcombo/devise · GitHub
Flexible authentication solution for Rails with Warden. - devise/confirmable.rb at master · heartcombo/devise

認証メールを送らない方法

こうです。

user = User.new(email: email)
user.skip_confirmation_notification!
user.save

中身的にはこうなってて、

def skip_confirmation_notification!
  @skip_confirmation_notification = true
end

フラグの状態でメールを制御します。↓このへん。

devise/confirmable.rb#L305-L307 at master · plataformatec/devise

認証済にしてしまう方法

こうです。

user = User.new(email: email)
user.skip_confirmation!
user.save

中身はこうなってます。

def skip_confirmation!
  self.confirmed_at = Time.now.utc
end

confirmed_atに値をいれることで、認証済と判断されることになります。confirmedな場合には認証メールも送られません。