Пропустить проверку подлинности для omniauth-twitter при разработке 2.0
Я использую 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/info/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
Я хочу заставить пользователя указать адрес электронной почты для отправки бюллетеня, рекламодателя... и т.д.
Как я могу исправить эту проблему?
Спасибо!
Ответы
Ответ 1
Добавьте это в свою модель пользователя:
def email_required?
super && provider.blank?
end
Вы можете использовать эквивалентный метод для пароля:
def password_required?
super && provider.blank?
end
Это должно отменять требования к полю при использовании поставщиков Omniauth.
Ответ 2
Я столкнулся с одной и той же проблемой, Twitter не дает вам адрес электронной почты через oauth, вам нужно думать по-другому, чтобы получить электронное письмо. Единственное решение, которое я выяснил, переопределяет обратный вызов и использует данные twitter для автозаполнения формы и дает пользователю возможность самостоятельно заполнить свою почту, а затем зарегистрировать и сохранить пользователя в базе данных.
Посмотрите следующий вопрос:
Есть ли способ получить идентификатор электронной почты пользователя после проверки его/ее идентификатора Twitter с помощью OAuth?
Ответ 3
Здесь подробно объяснено решение:
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, чем эти ссылки, поэтому я решил добавить их к ответам.
Ответ 4
Вам нужно удалить подтверждение наличия поля электронной почты.
Следуйте этот пост и посмотрите, работает ли это.
Извините за поздний ответ, надеюсь, что это поможет.