Обновляйте изображение и имя в Twitter после каждого входа в систему — Rails

#ruby-on-rails

#ruby-on-rails

Вопрос:

Мои пользователи могут входить в систему только через Twitter, и я использую omniauth-twitter gem (https://github.com/arunagw/omniauth-twitter ). Rails 4.1.2 и Ruby 2.1.0

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

Как я могу сделать так, чтобы мое приложение после каждого входа в систему проверяло, изменен ли какой-либо из атрибутов, и если да, то обновляло ими базу данных?

Большое вам спасибо.

Ответ №1:

Вы должны иметь возможность добавлять некоторый код в свое действие обратного вызова Twitter — действие, вызываемое по пути /auth/twitter/callback , — для чтения из OmniAuth::AuthHash, который возвращается вам через request.env['omniauth.auth'] . По сути, omniauth-twitter упаковывает ответ поставщика OAuth в удобный объект и помещает его в хэш запроса. Итак … что-то вроде этого:

 def twitter
  # ...
  update_picture
end

def update_picture
  auth = request.env['omniauth.auth']
  current_user.picture = auth.info.image
  # or whatever
end
  

К вашему СВЕДЕНИЮ: Объект OmniAuth::AuthHash — это, по сути, хэш с преимуществами. Это экземпляр объекта Hashie, на случай, если вам интересно узнать больше. (С моей точки зрения, я думаю, что это хэш Mash.)

Кроме того, вы можете найти ответ и пример возврата здесь, в omniauth-twitter readme.