首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计Omniauth-facebook旁路rails验证

设计Omniauth-facebook旁路rails验证
EN

Stack Overflow用户
提问于 2015-01-04 13:25:29
回答 1查看 625关注 0票数 1

我只是跟随这篇文章在rails 4应用程序中实现无所不在的功能。

在我的用户模型中,我有两种类型的用户,即管理(由表单创建)和成员(由全方位创建)。我需要绕过所有的验证成员用户谁将创建无所不在。

我知道,可以通过以下选择来做到这一点:

代码语言:javascript
复制
save(validate: false)

然而,采用了first_or_create方法:

代码语言:javascript
复制
  def self.from_omniauth(auth)
    # where(auth.slice(:provider, :uid)).first_or_create do |user|
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
      user.email = auth.info.email
      user.password = Devise.friendly_token[0,20]
      user.name = auth.info.name   # assuming the user model has a name
      user.image = auth.info.image # assuming the user model has an image
    end
  end

,所以,我的问题是:在这个无所不在的情况下,我如何绕过所有的验证?

请给我建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-04 17:13:25

first_or_create似乎没有任何选择,但您仍然有几个选项。

您可以不使用first_or_create,而可以执行first_or_initialize,它与first_or_create一样工作,但不保存。然后,您将有一个可以调用save(validate: false)的新记录。

但是,如果系统中的记录是无效的,那么如果你去更新这些记录中的一封电子邮件,你将不得不再次绕过验证程序。

我的建议是将这一逻辑转移到验证本身:

代码语言:javascript
复制
validate_presence_of :name, unless: -> { from_omniauth? }

private

def from_omniauth?
  provider && uid
end
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27765953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档