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

标签 ruby-on-rails ruby-on-rails-3 devise omniauth

我正在使用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/

相关文章:

ruby-on-rails - 为需要身份验证的操作设计操作过滤器

ruby-on-rails - RVM 正在加载错误版本的 ruby​​?

ruby-on-rails - Rails + 设计 : Undefined Local Variable in UserRegistration#Edit

ruby-on-rails - 在 Rails 应用程序上设计、CanCan 和 ActiveAdmin

ruby-on-rails-3 - 找不到生成器 acts_as_taggable_migration

ruby-on-rails - 在 API 中设计 RegistrationsController 创建操作

ruby-on-rails - 为什么这个 Rails 嵌套属性分配不起作用

css - 我可以使用 twitter bootstrap 在同一个网站上使用不同数量的网格列吗?

ruby-on-rails - rspec email_spec 和 jobs.. 它是如何工作的?我想检查这封信是否已发送..可能还有电子邮件正文

ruby-on-rails - ruby on rails 中的 "_path"方法是什么?