Rails 3.2 アプリでは、omniauth-twitter を使用して User モデルで Devise を使用しています。ユーザーには多くの認証があります。
ログインはメール+パスワード、またはTwitterから。
ユーザーが Twitter にサインアップしている場合にメールが不要になるように、email_required メソッドを変更しようとしています (Twitter はメール応答でメールを提供しません)。ユーザーは設定画面に移動し、そこでメールを設定する必要があります。
ここで自分の状態がどうあるべきかを理解するのに苦労しています。みたいなことを考えている
def email_required?
if user.sign_in_count == 1 && self.authentications.first.provider == "twitter"
false
else
super
end
end
ただし、(1) 認証レコードは作成されますが、この検証に合格したときに作成されないため、利用できません。(2) ユーザーが作成された直後にメールが必要になるようにしたい (つまり、サインイン カウントが 1 のままである可能性がある)
別のオプションとして、(疑似コード) のように、Twitter パラメーターがセッション内にあるかどうかを確認することもできます。
def email_required?
if session["devise.twitter_data"]
false
else
super
end
end
しかし、モデルからセッションにアクセスするのは正しくないようです。
提案や考えをいただければ幸いです。明らかなことを見落としているような気がします。