Подтвердить что ты не робот

Пропустить проверку подлинности для 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

Я хочу заставить пользователя указать адрес электронной почты для отправки бюллетеня, рекламодателя... и т.д.

Как я могу исправить эту проблему?

Спасибо!

4b9b3361

Ответ 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

Вам нужно удалить подтверждение наличия поля электронной почты. Следуйте этот пост и посмотрите, работает ли это. Извините за поздний ответ, надеюсь, что это поможет.