2010-12-16 1 views
0

В настоящее время я аутентифицирую пользователя, используя omniauth. Это выглядит, как это в моем контроллере сессий и хорошо работает:Как получить токен доступа для пользователя, используя драгоценный камень Twitter и драгоценный камень 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 

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

ответ

2

Вам необходимо сохранить как токен, так и секрет, предоставленный 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

+0

undefined метод `authorizations 'для # <Пользователь: 0x007fd5e2081398> – Rob 2014-04-13 17:31:43

Смежные вопросы