在设计2.0上跳过omniauth-twitter的电子邮件validation

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

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

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 

我在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 

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

我该如何解决这个问题?

谢谢!

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

 def email_required? super && provider.blank? end 

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

 def password_required? super && provider.blank? end 

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

我面临同样的问题,Twitter没有通过oauth给你发电子邮件,你必须以另一种方式思考获取电子邮件。 我想出的唯一解决方案是覆盖回调并使用twitter数据自动填充表单,并让用户有机会自己完成邮件,然后注册并将用户保存在数据库中。

看下面的问题:

有没有办法在使用OAuthvalidation他/她的Twitter身份后获取用户的电子邮件ID?

这里详细解释了一个解决方案: http : //asciicasts.com/episodes/236-omniauth-part-2

在GitHub上: https : //github.com/fertapric/rails3-mongoid-devise-omniauth/wiki/How-To :-Retrieve-email-information-(middle-step)-from-providers-like-Twitter- or -LinkedIn

出于某种原因,这个问题在Google的排名中比这些链接更高,所以我想我会将它们添加到答案中。

您需要删除电子邮件字段的状态validation。 请关注此帖 ,看看是否有效。 对不起,迟到的回复,希望这会有所帮助。