【Devise】Twitter連携ログイン時、メール認証を回避する。

Twitter連携を使用し、ログインした場合Twitterを伝って持ってこれる情報にはメールアドレスはありません。

なので認証するときはダミーのメールアドレスを生成し、それをメールアドレスとして設定していたのですが、Deviseのメール認証をオンにしているとダミーで生成されたメールアドレスに認証URLが送られてしまい、永遠にTwitter連携でログインすることは出来なくなってしまいます。

それを回避するためにDeviseには

skip_confirmation!

というメソッドがあります。これを@user.saveの直前に記述することで認証回避。

恐らく@user.saveはcontrollers/omniauth_callbacks_controller.rb に記述されているので

if @user.persisted?
            sign_in_and_redirect @user
        else
            @user.skip_confirmation!
            @user.save!
            sign_in_and_redirect @user
end

のようにすればいいかなと。

一応僕は

https://qiita.com/cigalecigales/items/f4274088f20832252374

ここを参考にTwitter連携のコードを書いたので上のように書けば、認証を回避することができるのですが、別の書き方をしている場合はちょっとやり方が違うかもしれないです。

参考までに、他のWeb系のサイトを見てみると、

Twitter連携ボタン→認証完了→メールアドレスだけ打ち込むフォーム→登録完了

みたいにメールアドレスだけ手動で打ち込む設計になっていたので、正直それが一番かなとは思いました。

ただ、Twitter連携を使用してログインする人って、それすら面倒な人が使うと思うんです。

慣性の法則的なアレで。

なので、メール認証回避でいいかな。と。