我正在使用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
我希望用户强制为发送简报,广告客户等提供电子邮件地址
如何解决此问题?
谢谢!
答案 0 :(得分:29)
将此添加到您的用户模型:
def email_required?
super && provider.blank?
end
您可以使用等效的密码方法:
def password_required?
super && provider.blank?
end
这应该在使用Omniauth提供程序时覆盖字段要求。
答案 1 :(得分:2)
我面临同样的问题,Twitter没有通过oauth给你发电子邮件,你必须以另一种方式思考获取电子邮件。我想出的唯一解决方案是覆盖回调并使用twitter数据自动填写表单,并让用户自己完成邮件,然后注册并将用户保存在数据库中。
看下面的问题:
Is there a way to get an user's email ID after verifying his/her Twitter identity using OAuth?
答案 2 :(得分:2)
这里详细解释了一个解决方案: http://asciicasts.com/episodes/236-omniauth-part-2
出于某种原因,这个问题在Google的排名中显示出比这些链接更高的问题,所以我想我会将它们添加到答案中。
答案 3 :(得分:0)
您需要删除电子邮件字段的状态验证。 关注this post,看看是否有效。 对于迟到的回复感到抱歉,希望这会有所帮助。