在devise 2.0上跳过omniauth-twitter的电子邮件验证

hyp*_*jas 18 ruby-on-rails devise omniauth ruby-on-rails-3

我正在使用devise 2.0和gem omn​​iauth-twitter

问题是twitter没有响应发送电子邮件,因此我的应用程序的模型用户验证了有一封电子邮件,我在回调中收到以下错误:

Email can't be blank
Run Code Online (Sandbox Code Playgroud)

我在我的user.rb模型中有这个:

#config omniauth twitter
def self.find_for_twitter_oauth(access_token, signed_in_resource = nil)
    data = access_token.extra.raw_info
    if user = User.where(:username => data.screen_name).first
        user
    else
        User.create!(:username => data.screen_name, :password => Devise.friendly_token)
    end
end
Run Code Online (Sandbox Code Playgroud)

我在omn​​iauth_callbacks_controller.rb中有这个

  def twitter
    @user = User.find_for_twitter_oauth(request.env["omniauth.auth"], current_user)
    if @user.persisted?
      flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Twitter"
      sign_in_and_redirect @user, :event => :authentication
    else
      # http://stackoverflow.com/questions/7117200/devise-for-twitter-cookie-overflow-error
      session["devise.twitter_data"] = request.env["omniauth.auth"].except('extra')
      redirect_to new_user_registration_url
    end
   end
Run Code Online (Sandbox Code Playgroud)

我希望用户强制为发送简报,广告客户等提供电子邮件地址

我该如何解决这个问题?

谢谢!

小智 29

将其添加到您的用户模型:

def email_required?
  super && provider.blank?
end
Run Code Online (Sandbox Code Playgroud)

您可以使用等效的密码方法:

def password_required?
  super && provider.blank?
end
Run Code Online (Sandbox Code Playgroud)

这应该在使用Omniauth提供程序时覆盖字段要求.


小智 0

您需要删除电子邮件字段的存在验证。按照这篇文章看看是否有效。抱歉回复晚了,希望这会有所帮助。

  • 谢谢 jacobaweiss,但我需要收到用户的电子邮件。我无法在数据库中保存没有电子邮件的用户:(。也许我需要创建一个重定向并显示一个表单,并且用户必须编写电子邮件才能创建他的帐户。我该怎么做?谢谢 (3认同)