Skip email validation for omniauth-twitter on devise 2.0
devise, omniauth, ruby-on-rails, ruby-on-rails-3
Solution
Add this to your User model:
def email_required?
super && provider.blank?
end
You can use an equivalent method for the password:
def password_required?
super && provider.blank?
end
This should override the field requirements when using Omniauth providers.
Problem
I'm using devise 2.0 and gem omniauth-twitter The problem is that twitter does not send an email in response, so the model user of my application validates that there is an email and I get the following error in the callback: ``` Email can't be blank ``` I have this in my user.rb model: ``` #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 ``` and I have this in my 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 ``` I want force to user to give a email address for send newsletter, advertirser...etc How can I fix this problem? Thank you!