web-dev-qa-db-fra.com

Continuez à obtenir OAuth :: Erreur non autorisée lors de l'utilisation de oauth et Twitter Ruby gems

J'utilise le Ruby Twitter gem et oauth pour accéder aux comptes Twitter des utilisateurs. Dans mon code, j'ai:

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

où jeton et secret ont mon jeton et mon secret réels insérés. Lorsque je clique sur le lien vers @Twitter_auth_url, je suis redirigé vers Twitter et on me demande d'accorder l'accès. Je clique sur Autoriser, puis Twitter me redirige vers mon URL de rappel http://www.mydomain.com/Twitter_callback/?oauth_token=fmy2aMvnjVgaFrz37bJ4JuB8r5xN79gsgDQRG4BNY qui frappe alors ce code:

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

Le jeton de demande Twitter et le secret sont bien définis. Cependant, je me retrouve avec une erreur d'autorisation:

 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'

Le code échoue sur cette ligne:

oauth.authorize_from_request(session[:Twitter_request_token], session[:Twitter_request_secret])

lorsqu'il essaie d'obtenir un jeton d'accès. Vous pouvez voir le code source de authorize_from_request ici . Je ne sais pas pourquoi cela se produit. Quelqu'un a des idées?

40
Tony

C'était l'une des choses les plus ennuyeuses à déboguer que j'ai rencontrées. Je produisais à quelques endroits par accident parce que les URL sont dynamiques et qu'elles n'étaient pas définies dans mon cas de test (j'utilise ceci pour afficher les données du graphique et il n'y en a pas assez pour le moment, donc les URL de l'API Google Chart sont vides). Cela a amené mon navigateur à faire plusieurs demandes à mon hôte local lorsque certaines pages ont été chargées. D'une manière ou d'une autre, cela a rendu le processus oauth nul. Évidemment, il n'y a aucun moyen pour les gens de S.O. de connaître mon problème spécifique à l'application, j'ai donc dû répondre à ma propre question.

4
Tony

Un peu tard pour la fête, mais j'ai moi-même rencontré le même problème. J'ai suivi le problème jusqu'à la configuration de mon application OAuth sur Twitter. Je n'avais initialement pas spécifié d'URL de rappel car je n'en étais pas sûr.

Une fois que j'avais configuré mon Rails application, je suis retourné pour trouver que Twitter avait supposé que j'étais une application de bureau car je n'avais pas spécifié d'URL de rappel. Une fois que j'ai changé cela en site Web et entré une URL de rappel J'ai arrêté d'avoir 400s.

78
George Palmer

Si vous obtenez l'erreur 401 - OAuth :: Unauthorized, assurez-vous de modifier les paramètres de votre application Twitter comme suit:

29
Hatem Mahmoud

il s'agit d'un problème de synchronisation de l'heure de votre système avec le serveur Twitter.

8
Rabia

Twitter n'autorise pas localhost dans le cadre d'une URL de rappel valide.

Utilisez plutôt http://127.0.0.1:3000/auth/Twitter/callback

J'espère que cela t'aides

7
Thank you

J'ai eu ce même problème et aucune des suggestions de ce fil n'a fonctionné pour moi.

J'ai trouvé que le problème pour moi était le TIMESTAMP sur ma demande. L'appareil mobile sur lequel j'exécutais mes scripts avait une horloge surélevée. Lorsque j'ai mis à jour l'heure système de mon appareil à l'heure correcte (c'est-à-dire maintenant), toutes mes demandes sont revenues "200 OK" au lieu de "401 Non autorisé".

2
Kenny Wyland

Ce problème semble être dû au fait que Twitter ne peut pas gérer connection keep-alive correctement. Assurez-vous de définir connection=close http header dans la demande à Twitter. J'ai perdu un week-end pour déboguer ça.

1
vadim

pas assez d'informations pour moi, mais à quand remonte la dernière mise à jour de la gemme Twitter? Twitter a changé son oauth 'stuff' à la mi-mai environ. Peut-être en avez-vous un ancien. Je mettrais à jour votre question pour afficher le callback_url, et vous assurer que vous avez le bon token et le bon secret, ce que vous n'avez pas.

avez-vous également mis la bonne URL de rappel dans la page de votre application Twitter? beaucoup de fois qui vous gâche aussi.

si cela échoue, utilisez plutôt mbleighs Twitter_auth . cela a fonctionné pour moi et est assez lisse.

0
pjammer