【问题标题】:Rails+Devise+OmniAuth: How to skip email validation for Twitter? [duplicate]Rails+Devise+OmniAuth:如何跳过 Twitter 的电子邮件验证? [复制]
【发布时间】:2013-01-11 02:02:55
【问题描述】:

可能重复:
Skip email validation for omniauth-twitter on devise 2.0

我正在使用此电子邮件验证规则:

  validates :email,
            :presence => true, 
            :format => { :with => VALID_EMAIL_REGEX }, 
            :uniqueness => {:case_sensitive => false }

  before_save do |user| 
        user.email = email.downcase#
        user.slug  = user.username.parameterize
  end

我尝试添加:

  def email_required?
    super && provider.blank?
  end

对于跳过电子邮件验证,如果访问者想通过 Twitter 注册,但我在这里仍然收到错误,看起来 email_required? 不起作用。

我错过了什么?

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby validation twitter devise


    【解决方案1】:

    email_required 如果您想跳过设计的验证,则可以工作,请参阅:https://github.com/plataformatec/devise/blob/c179cef365f7188c91cbbc3db924a9f1f9563c3c/lib/devise/models/validatable.rb#L29 但是,如果您想跳过自己的电子邮件验证,可以使用以下内容:

    validates :email,
              :presence => true, 
              :format => { :with => VALID_EMAIL_REGEX }, 
              :uniqueness => {:case_sensitive => false },
              :if => 'provider.blank?'
    

    【讨论】:

    • 感谢您的回复纳什。当我尝试这个时,仍然存在一个问题 - 我在 before_save 块的第一行收到错误 undefined method 'downcase' for nil:NilClass。我该如何处理这个问题?在数据库方案中设置了email不能为空。
    • 你可以检查before_save中是否有邮件:user.email = email.downcase if email
    • 但在这种情况下,我会收到错误消息PG::Error: ERROR: null value in column "email" violates not-null constraint
    猜你喜欢
    • 1970-01-01
    • 2012-04-30
    • 2023-04-05
    • 2018-11-10
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    相关资源
    最近更新 更多