#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.