Как получить токен доступа для пользователя, использующего гем Twitter и гем Omniauth, когда пользователи уже вошли в систему?

В настоящее время я аутентифицирую пользователя с помощью omniauth. Это выглядит так в моем контроллере сеансов и работает хорошо:

def create
  auth = request.env['omniauth.auth']
  unless @auth = Authentication.find_from_hash(auth)
    # Create a new user or add an auth to existing user, depending on
    # whether there is already a user signed in.
    @auth = Authentication.create_from_hash(auth, current_user)
  end
  # Log the authorizing user in.
  self.current_user = @auth.user

  redirect_to authentications_url, :notice => "You've signed in!"
end

После этого я сохранил uid твиттера в своей таблице аутентификаций (я также использую linkedin, facebook) и думаю, что сеансы твиттера были закрыты.

Как мне теперь пройти аутентификацию, чтобы использовать гем Twitter? Я думаю, что это должно быть что-то вроде этого, если бы я вызывал его сразу после обратного вызова omniauth.

  token = auth['credentials']['token'],
  secret = auth['credentials']['secret']
  Twitter.oauth_token = token
  Twitter.oauth_token_secret = secret

Мне явно нужно перезапустить сеанс и поставить токен и секрет в нужное место. Как я могу создать метод для этого?


person TLK    schedule 16.12.2010    source источник


Ответы (1)


Вам необходимо сохранить как токен, так и секрет, предоставленный Twitter, в вашей таблице аутентификаций (Authentication.create_from_hash). Пока вы это делаете, это должно работать:

twitter_credentials = current_user.authorizations.find_by_provider(:twitter)

Twitter.oauth_token = twitter_credentials.token
Twitter.oauth_token_secret = twitter_credentials.token_secret

Это предполагает, что в вашей таблице аутентификаций вы храните токен и секрет Twitter как token и token_secret, а также храните провайдера как twitter.

person Andrei Serdeliuc ॐ    schedule 19.02.2011
comment
неопределенный метод "авторизации" для #‹Пользователь:0x007fd5e2081398› - person Rob; 13.04.2014