繁体   English   中英

设计Omniauth-facebook旁路Rails验证

[英]Devise Omniauth-facebook bypass rails validations

我刚刚按照这篇文章在我的Rails 4应用程序中实现omniauth。

在我的用户模型中,我有两种类型的用户,即ADMIN(由表单创建)和MEMBER(由omniauth创建)。 我需要绕过将由omniauth创建的MEMBER用户的所有验证。

我知道可以通过传递此选项来完成:

save(validate: false)

但是,采用了first_or_create方法:

  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

因此,我的问题是:在这种omniauth情况下,如何绕过所有验证?

请指教。

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

除了first_or_create ,您可以执行first_or_initialize ,它的作用与first_or_create相同,但是不会保存。 然后,您将拥有一条新记录,可以在其上调用save(validate: false)

但是,那么您在系统中会有无效的记录,因此,例如,如果您要更新这些记录的电子邮件之一,则必须重新进行验证。

我建议将这种逻辑转移到验证本身:

validate_presence_of :name, unless: -> { from_omniauth? }

private

def from_omniauth?
  provider && uid
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM