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

Продолжайте получать OAuth:: Несанкционированная ошибка при использовании oauth и twitter ruby ​​gems

Я использую драгоценный камень ruby ​​twitter и oauth, чтобы получить доступ к учетным записям пользователей twitter. В моем коде у меня есть:

unless @user.twitter_authd?
      oauth = Twitter::OAuth.new('token', 'secret')
      session[:twitter_request_token] = oauth.request_token.token
      session[:twitter_request_secret] = oauth.request_token.secret
      @twitter_auth_url = oauth.request_token.authorize_url
    end

где токены и секрет имеют мой фактический токен и секрет. Когда я нажимаю на ссылку на @twitter_auth_url, меня берут в твиттер и просят предоставить доступ. Я нажимаю кнопку "Разрешить", а затем твиттер перенаправляет меня на мой обратный URL http://www.mydomain.com/twitter_callback/?oauth_token=fmy2aMvnjVgaFrz37bJ4JuB8r5xN79gsgDQRG4BNY, который затем обращается к этому коду:

oauth = Twitter::OAuth.new('token', 'secret')

    logger.info("session[:twitter_request_token] = #{session[:twitter_request_token]}")
    logger.info("session[:twitter_request_secret] = #{session[:twitter_request_secret]}")

    oauth.authorize_from_request(session[:twitter_request_token], session[:twitter_request_secret])
    session[:twitter_request_token] = nil
    session[:twitter_request_secret] = nil

    @user.update_attributes({
      :twitter_token => oauth.access_token.token, 
      :twitter_secret => oauth.access_token.secret,
    })

    redirect_to root_path

Тетрик запроса и секрет твиттера настраивается просто отлично. Однако в итоге я получил ошибку авторизации:

 OAuth::Unauthorized in MainController#twitter_callback

401 Unauthorized

RAILS_ROOT: /Users/TAmoyal/Desktop/RoR_Projects/mls
Application Trace | Framework Trace | Full Trace

/Library/Ruby/Gems/1.8/gems/oauth-0.3.4/lib/oauth/consumer.rb:167:in `token_request'
/Library/Ruby/Gems/1.8/gems/oauth-0.3.4/lib/oauth/tokens/request_token.rb:14:in `get_access_token'
/Library/Ruby/Gems/1.8/gems/erwaller-twitter-0.6.13.1/lib/twitter/oauth.rb:29:in `authorize_from_request'
/Users/TAmoyal/Desktop/RoR_Projects/mls/app/controllers/main_controller.rb:70:in `twitter_callback'

В этой строке код не работает:

oauth.authorize_from_request(session[:twitter_request_token], session[:twitter_request_secret])

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

4b9b3361

Ответ 1

Это была одна из самых неприятных вещей для отладки, с которыми я столкнулся. Я случайно вывозил пару мест, потому что URL-адрес динамический, и в моем тестовом примере они не были определены (я использую это для отображения данных диаграммы, и этого недостаточно, поэтому URL-адрес URL-адреса google пустой). Это заставило мой браузер сделать несколько запросов на мой локальный хост, когда были загружены некоторые страницы. Каким-то образом это сделало процесс овладения процессом. Очевидно, что людям, живущим на С.О. чтобы узнать о моей конкретной проблеме, поэтому мне пришлось ответить на мой собственный вопрос.

Ответ 2

Немного опоздал на вечеринку, но сам столкнулся с той же проблемой. Я отследил проблему до настройки моего приложения OAuth в Twitter. Я изначально не указал URL-адрес обратного вызова, поскольку я был не уверен в этом.

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

Ответ 3

Если вы получаете ошибку 401 - OAuth:: Unauthorized, убедитесь, что вы изменили настройки своего приложения Twitter следующим образом:

Ответ 4

Это проблема синхронизации времени вашей системы с сервером Twitter.

Ответ 5

Twitter не позволяет localhost как часть действительного URL-адреса обратного вызова.

Вместо этого используйте http://127.0.0.1:3000/auth/twitter/callback

Надеюсь, что это поможет

Ответ 6

У меня была такая же проблема, и ни одно из предложений в этом потоке не работало для меня.

Я нашел, что проблема для меня была TIMESTAMP по моей просьбе. На мобильном устройстве, на котором я запускал свои скрипты, были часы с поднятыми вверх. Когда я обновил системное время на своем устройстве до нужного времени (т.е. Сейчас), все мои запросы вернулись "200 OK" вместо "401 Unauthorized".

Ответ 7

Эта проблема, по-видимому, вызвана тем, что твиттер не может правильно обрабатывать connection keep-alive. Убедитесь, что вы установили connection=close http header в запросе на твиттер. Утратил выходные, отлаживая это.

Ответ 8

недостаточно информации для меня, но когда последний раз обновлялся твиттер? твиттер изменил свой "материал" в середине может ок. возможно, у вас старый. Я бы обновил ваш вопрос, чтобы показать callback_url, и убедитесь, что у вас есть правильный токен и секрет, который выглядит так, как будто у вас его нет.

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

если это не позволяет использовать mbleighs twitter_auth. он работал у меня и был довольно гладким.