0

在 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

但从模型访问会话似乎不正确。

将不胜感激任何建议或想法,我觉得我忽略了一些明显的东西!

4

0 回答 0