我正在使用devise 2.0和gem omniauth-twitter
问题在于,twitter不会发送电子邮件作为响应,因此我的应用程序的模型用户验证了是否存在电子邮件,并且在回调中收到以下错误:
Email can't be blank
我的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
我在omniauth_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
我要强制用户提供电子邮件地址以发送新闻通讯,广告...等
我该如何解决这个问题?
谢谢!
最佳答案
将此添加到您的用户模型:
def email_required?
super && provider.blank?
end
您可以对密码使用等效的方法:
def password_required?
super && provider.blank?
end
使用Omniauth提供程序时,这应覆盖字段要求。
关于ruby-on-rails - 在devise 2.0上跳过omniauth-twitter的电子邮件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10226203/