やりたいこと
deviseでconfirmableを有効にしてる場合、会員登録のフローでメールアドレスの確認が必要で面倒。
会員登録時のメール認証は省いて後から認証を行ってもらう形を取りたい。
confirmableモジュール
confirmableモジュールの中で認証系を扱っているのは下記のコード。
github.com/plataformatec/devise/blob/master/lib/devise/models/confirmable.rb
def active_for_authentication?
super && (!confirmation_required? || confirmed? || confirmation_period_valid?)
end
メール認証が完了してない場合に認証チェックメソッドを上書きしてる。これをメール認証が完了してなくても大丈夫なようにオーバーライドしたい。
confirmableモジュールの上書き
deviseのinitializerあたりに下記コードを追加して対応。
config/initializer/devise.rb
Devise::Models::Confirmable.module_eval do
def active_for_authentication?
super # コメントアウト && (!confirmation_required? || confirmed? || confirmation_period_valid?)
end
end
あとはlayoutsにてメールアドレスの確認を促すアラートを出せば良いかと思います。
app/views/layouts/application.html.erb
<% if user_signed_in? && !current_user.confirmed? %>
<div class="alert">
メール認証が完了していません!
<%= link_to "> 再送はこちら", new_user_confirmation_path %>
</div>
<% end %>
メールの本人確認が出来ていない段階で本サイトにログインできているので、メールを飛ばしたり等の処理の所は気をつけた方がいいですね。