Continuez à obtenir OAuth :: Erreur non autorisée lors de l’utilisation des gem ruby ​​de oauth et twitter

J’utilise le bijou de ruby ​​twitter 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ù le jeton et le secret ont mon jeton et mon secret réels insérés. Lorsque je clique sur le lien vers le @twitter_auth_url, je suis amené à twitter et à demander un access. 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_atsortingbutes({ :twitter_token => oauth.access_token.token, :twitter_secret => oauth.access_token.secret, }) redirect_to root_path 

Le jeton de demande de twitter et le secret sont bien réglés. 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 à cette ligne:

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

quand il essaie d’obtenir un jeton d’access. 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?

Un peu tard pour la fête, mais je suis tombé sur le même problème moi-même. J’ai suivi le problème jusqu’à la configuration de mon application OAuth sur Twitter. Au départ, je n’avais pas spécifié d’URL de rappel car je n’en étais pas certain.

Une fois que j’ai installé mon application pour rails, je suis retourné pour constater 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 que j’ai entré une URL de rappel, j’ai arrêté de recevoir les 400.

Si vous obtenez l’erreur 401 – OAuth :: Unauthorized, assurez-vous de modifier les parameters de votre application Twitter comme suit:

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

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

Au lieu de cela, utilisez http://127.0.0.1:3000/auth/twitter/callback

J’espère que cela t’aides

C’était l’une des choses les plus ennuyeuses à déboguer que j’ai rencontrées. Je suis sorti par hasard à plusieurs endroits parce que les URL sont dynamics et qu’elles n’étaient pas définies dans mon scénario de test (je les utilise pour afficher les données du graphique et il n’y en a pas assez pour que les URL des API Google Chart soient vierges). Cela a amené mon navigateur à faire plusieurs requêtes sur mon hôte local lors du chargement de certaines pages. D’une manière ou d’une autre, le processus oauth a échoué. De toute évidence, les gens sur SO n’ont aucun moyen de connaître le problème spécifique à mon application. Je devais donc répondre à ma propre question.

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

J’ai trouvé le problème pour moi était le TIMESTAMP sur ma demande. L’appareil mobile sur lequel je exécutais mes scripts avait une horloge montée. Lorsque j’ai mis à jour l’heure système sur mon appareil au bon moment (c.-à-d. Maintenant), toutes mes demandes sont revenues “200 OK” au lieu de “401 Non autorisé”.

Ce problème semble être dû au fait que twitter ne soit pas capable de gérer correctement la connection keep-alive . Assurez-vous de définir la connection=close http header dans la requête à twitter. A gaspillé un week-end de débogage cela.

Pas assez d’informations pour moi, mais quand la dernière fois que twitter gem a été mis à jour? twitter a changé son «oauth» à la mi-mai. peut-être vous avez un ancien. Je mettrais à jour votre question pour afficher le callback_url, et assurez-vous que vous avez le bon jeton et le secret, à quoi vous ressemblez.

aussi, avez-vous mis la bonne URL de rappel dans votre page d’application twitter? beaucoup de fois qui vous bousillent aussi.

Si cela échoue, utilisez plutôt mbleighs twitter_auth . ça a fonctionné pour moi et c’est assez chic.