在 Rails 3.2 应用程序中,我在用户模型上使用 Devise,带有omniauth-twitter。一个用户有许多身份验证。
登录是通过电子邮件 + 密码,或通过 Twitter。
我正在尝试修改 email_required 方法,以便在用户注册 Twitter 时不需要电子邮件(Twitter 不会在其电子邮件回复中提供电子邮件)。然后,用户将被带到一个设置屏幕,他需要在其中设置他的电子邮件。
我无法确定我的情况应该是什么。我在想类似的东西
def email_required?
if user.sign_in_count == 1 && self.authentications.first.provider == "twitter"
false
else
super
end
end
但是(1) Authentication 记录是在这个验证通过时建立但没有创建的,所以不可用;(2) 我希望在创建用户后立即需要电子邮件(即,登录数可能仍为 1)
另一种选择可能是检查 Twitter 参数是否在会话中,例如(伪代码)
def email_required?
if session["devise.twitter_data"]
false
else
super
end
end
但从模型访问会话似乎不正确。
将不胜感激任何建议或想法,我觉得我忽略了一些明显的东西!