Twitter oAuth callbackUrl - Développement de l'hôte local


112

Est-ce que quelqu'un d'autre a du mal à obtenir l'URL de rappel de Twitters oAuth pour atteindre son environnement de développement d'hôte local? Apparemment, il a été désactivé récemment. http://code.google.com/p/twitter-api/issues/detail?id=534#c1

Quelqu'un a-t-il une solution de contournement. Je ne veux pas vraiment arrêter mon développement


Cela a fonctionné pour moi en définissant l'URL de rappel Twitter sur l'URL de mon site Web réel. Lors du test dans localhost -> inscription à Twitter, redirigé vers localhost (au lieu de l'url du site Web).
Sudhakar Krishnan

Réponses:


135

Alternative 1.

Configurez votre fichier .hosts (Windows) ou etc / hosts pour pointer un domaine actif vers votre IP localhost. tel que:

127.0.0.1 xyz.com

où xyz.com est votre vrai domaine.

Alternative 2.

En outre, l'article donne une astuce pour utiliser alternativement un service de raccourcissement d'URL. Raccourcissez votre URL locale et fournissez le résultat sous forme de rappel.

Alternative 3.

De plus, il semble que cela fonctionne pour fournir par exemple un http://127.0.0.1:8080rappel vers Twitter, au lieu de http://localhost:8080.


3
Cela pourrait-il être à l'origine de l'erreur suivante: Le serveur distant a renvoyé une erreur: (401) Non autorisé?
DevDave

Comment fonctionne localhost lorsqu'il n'y a pas de tunnel vers lui? Cela ne touche pas votre machine locale?
Jack Tuck

@JackTuck Le rappel est appelé par le navigateur de l'utilisateur, pas par les serveurs de Twitter.
moelleux

25

Je devais juste faire ça la semaine dernière. Apparemment, localhostcela ne fonctionne pas mais 127.0.0.1Go comprend.

Cela suppose bien sûr que vous enregistrez deux applications sur Twitter, une pour votre live www.mysite.comet une autre pour 127.0.0.1.



8

Oui, il a été désactivé en raison du récent problème de sécurité détecté dans OAuth. La seule solution pour le moment est de créer deux applications OAuth - une pour la production et une pour le développement. Dans l'application de développement, vous définissez votre URL de rappel localhost au lieu de celle en direct.


J'ai juste essayé de le faire, mais cela n'accepte pas localhost: 3000 comme format d'URL ...
David N.Welton

1
Oui, ils semblent filtrer ces URL. :( Mais la prise en charge des URL de rappel personnalisées est de retour - peut-être qu'elles sont prises en charge là-bas.
arikfr

8

URL de rappel modifiée

http://localhost:8585/logintwitter.aspx

Convertir en

http://127.0.0.1:8585/logintwitter.aspx

7

Voici comment je l'ai fait:

URL de rappel enregistrée: http://127.0.0.1/Callback.aspx

   OAuthTokenResponse authorizationTokens = 
        OAuthUtility.GetRequestToken(ConfigSettings.getConsumerKey(), 
                                     ConfigSettings.getConsumerSecret(), 
                                     "http://127.0.0.1:1066/Twitter/Callback.aspx");

ConfigSettings:

public static class ConfigSettings
{
    public static String getConsumerKey()
    {
        return System.Configuration.ConfigurationManager.AppSettings["ConsumerKey"].ToString();
    }

    public static String getConsumerSecret()
    {
        return System.Configuration.ConfigurationManager.AppSettings["ConsumerSecret"].ToString();
    }

}

Web.config:

<appSettings>

    <add key="ConsumerKey" value="xxxxxxxxxxxxxxxxxxxx"/>
    <add key="ConsumerSecret" value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>

</appSettings>

Assurez-vous de définir la propriété «utiliser les ports dynamiques» de votre projet sur «faux» et entrez un numéro de port statique à la place. (J'ai utilisé 1066).

J'espère que ça aide!


7

Utilisez http://smackaho.st

Ce qu'il fait est une simple association DNS à 127.0.0.1 qui vous permet de contourner les filtres sur localhost ou 127.0.0.1:

smackaho.st. 28800 DANS UN 127.0.0.1

Donc, si vous cliquez sur le lien, il vous affichera ce que vous avez sur votre serveur Web local (et si vous n'en avez pas, vous obtiendrez un 404). Vous pouvez bien sûr le définir sur n'importe quelle page / port que vous souhaitez:

http://smackaho.st:54878/twitter/callback


6
smackaho.st n'est plus disponible tbaggery.com/2010/03/04/smack-a-ho-st.html . Utilisez plutôt lvh.me. Il va directement à localhost.
Justin

5

Je travaillais avec l'URL de rappel Twitter sur mon hôte local. Si vous ne savez pas comment créer un hôte virtuel (c'est important), utilisez Ampps. Il est vraiment cool et facile. En quelques étapes, vous avez votre propre hôte virtuel et chaque URL fonctionnera dessus. Par exemple:

  1. télécharger et installer ampps

  2. Ajouter un nouveau domaine. (ici, vous pouvez définir par exemple twitter.local) cela signifie que votre hôte virtuel sera http: //twitter.local et qu'il fonctionnera après l'étape 3.

  3. Je travaille sur Win alors allez dans votre fichier hôte -> C: \ Windows \ System32 \ Drivers \ etc \ hosts et ajoutez la ligne: 127.0.0.1 twitter.local

Redémarrez vos Ampps et vous pourrez utiliser votre rappel. Vous pouvez spécifier n'importe quelle URL, même si vous utilisez un framework MVC ou que vous avez une réécriture d'URL htaccess.

J'espère que cette aide! À votre santé.


Merci pour le conseil. Sous Linux, ajoutez simplement le nom de domaine de développement à / etc / hosts
jeremyvillalobos

3

Lorsque je développe localement, je configure toujours un nom de développement hébergé localement qui reflète le projet sur lequel je travaille. J'ai configuré cela dans xampp via xampp \ apache \ conf \ extra \ httpd-vhosts.conf, puis également dans \ Windows \ System32 \ drivers \ etc \ hosts.

Donc, si je mets en place un site de développement local pour example.com, je le définirais comme example.dev dans ces deux fichiers.

Réponse courte: Une fois que cela est correctement configuré, vous pouvez simplement traiter cette URL ( http://example.dev ) comme si elle était en direct (plutôt que locale) lorsque vous configurez votre application Twitter.

Une réponse similaire a été donnée ici: https://dev.twitter.com/discussions/5749

Citation directe (emphase ajoutée):

Vous pouvez fournir n'importe quelle URL valide avec un nom de domaine que nous reconnaissons sur la page des détails de l'application. OAuth 1.0a vous oblige à envoyer une valeur oauth_callback à l'étape de jeton de demande du flux et nous accepterons un rappel dynamique basé sur locahost pour cette étape .

Cela a fonctionné comme un charme pour moi. J'espère que cela t'aides.


3

Cela peut être fait très facilement avec Fiddler :

  • Ouvrez le menu Outils> HÔTES ...
  • Insérez une ligne comme 127.0.0.1 your-production-domain.com, assurez-vous que "Activer le remappage des demandes ..." est coché. N'oubliez pas d'appuyer Save.
  • Si l'accès à votre véritable serveur de production est nécessaire, quittez simplement Fiddler ou désactivez le remappage.
  • Le redémarrage de Fiddler activera le remappage (s'il est coché).

Un bonus agréable est que vous pouvez spécifier un port personnalisé, comme ceci: 127.0.0.1:3000 your-production-domain.com(il serait impossible de réaliser cela via le fichier hosts). En outre, au lieu d'IP, vous pouvez utiliser n'importe quel nom de domaine (par exemple, localhost).

De cette façon, il est possible (mais pas nécessaire) d'enregistrer votre application Twitter une seule fois (à condition que cela ne vous dérange pas d'utiliser les mêmes clés pour le développement local et la production).


2

éditez cette fonction sur TwitterAPIExchange.php à la ligne # 180

public function performRequest($return = true)
{
    if (!is_bool($return)) 
    { 
        throw new Exception('performRequest parameter must be true or false'); 
    }

    $header = array($this->buildAuthorizationHeader($this->oauth), 'Expect:');

    $getfield = $this->getGetfield();
    $postfields = $this->getPostfields();

    $options = array( 
        CURLOPT_HTTPHEADER => $header,
        CURLOPT_HEADER => false,
        CURLOPT_URL => $this->url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false
    );

    if (!is_null($postfields))
    {
        $options[CURLOPT_POSTFIELDS] = $postfields;
    }
    else
    {
        if ($getfield !== '')
        {
            $options[CURLOPT_URL] .= $getfield;
        }
    }

    $feed = curl_init();
    curl_setopt_array($feed, $options);
    $json = curl_exec($feed);
    curl_close($feed);

    if ($return) { return $json; }
}

Vous pouvez télécharger TwitterAPIExchange.php à partir d'ici github.com/J7mbo/twitter-api-php
Helper

2

J'ai eu le même défi et je n'ai pas été en mesure de donner localhost comme URL de rappel valide. J'ai donc créé un domaine simple pour nous aider les développeurs: https://tolocalhost.com

Il redirigera tout chemin vers votre domaine localhost et le port dont vous avez besoin. J'espère que cela pourra être utile à d'autres développeurs.


Excellente ressource, mais votre domaine ajoute "/" à la fin de l'url qui mène à 404 à certaines occasions. pourriez-vous s'il vous plaît le réparer? Par exemple, il redirige en tant que "localhost / somename /? <response>, mais cela devrait être" localhost / somename? <response>
Channa

@Channa J'ai essayé de reproduire cela mais il semble que le script fonctionne correctement. Quel navigateur utilisez-vous? J'ai essayé Chrome, Safari, Firefox et cela fonctionne comme prévu.
Jørgen

Cela m'arrive à la fois dans Chrome et Firefox. C'est le nom d'hôte que j'ai mis dans votre page " localhost: 8080 / dashboard / twitterRedirect.jsp " Mais quand il redirige il va vers " localhost: 8080 / dashboard / twitterRedirect.jsp /… " Veuillez noter le symbole "/" avant la question marque. Mon application m'enverra 404
Channa

1
@Channa vous ne devez pas mettre l'URL entière dans le champ du nom d'hôte. Il s'appelle: hostname, pas URL ;-) L'idée est de pouvoir remplacer 'localhost' par quelque chose comme: my.localhost.bla alors il l'utilisera à la place de localhost. Dans votre cas, le champ hôte doit être localhost. Vous définissez le port sur 8080 et configurez la redirection pour aller à: tolocalhost.com/dashboard/twitterRedirect.jsp cela redirigera vers: localhost: 8080 / dashboard / twitterRedirect.jsp
Jørgen

2

Semble de nos jours http://127.0.0.1également cessé de fonctionner. Une solution simple consiste à utiliser à la http://localtest.meplace http://localhostqu'elle pointe toujours vers 127.0.0.1Et vous pouvez même y ajouter n'importe quel sous-domaine arbitraire, et il pointera toujours vers127.0.0.1

Voir le site Web


1

définir callbackurl dans l'application twitter: 127.0.0.1:3000 et définir WEBrick pour qu'il se lie à 127.0.0.1 au lieu de 0.0.0.0

commande: rails s -b 127.0.0.1


1

On dirait que Twitter autorise désormais localhosttout ce que vous avez dans les Callback URLparamètres, à condition qu'il y ait une valeur.


1

J'ai eu du mal avec cela et j'ai suivi une douzaine de solutions, à la fin, tout ce que j'avais à faire pour travailler avec n'importe quel API SSL sur un hôte local était:

Allez télécharger: fichier cacert.pem

Dans php.ini* annuler les commentaires et modifier: curl.cainfo = "c:/wamp/bin/php/php5.5.12/cacert.pem"

  • Vous pouvez trouver où se trouve votre php.inifichier sur votre machine en exécutant php --inidans votre CLI
  • J'ai placé mon cacert.pem dans le même répertoire que php.ini pour plus de facilité.

1

Voici les étapes qui ont fonctionné pour moi pour que Facebook fonctionne avec une application locale sur mon ordinateur portable:

  • goto apps.twitter.com
  • entrez le nom, la description de l'application et l'URL de votre site Remarque: pour localhost: 8000, utilisez 127.0.0.1:8000 car l'ancien ne fonctionnera pas
  • entrez l'URL de rappel correspondant à votre URL de rappel définie dans TWITTER_REDIRECT_URI votre application Remarque: par exemple: http://127.0.0.1/login/twitter/callback (localhost ne fonctionnera pas).
  • Veuillez saisir à la fois les URL "Politique de confidentialité" et "Conditions d'utilisation" si vous souhaitez demander l'adresse e-mail de l'utilisateur.
  • cochez la case Accepter les conditions
  • cliquez sur [Créer votre application Twitter]
  • passez à l'onglet [Clés et jetons d'accès] en haut
  • copiez la "Clé consommateur (clé API)" et "Secret consommateur (secret API)" dans TWITTER_KEY et TWITTER_SECRET dans votre application
  • cliquez sur l'onglet "Permissions" et réglez de manière appropriée sur "lecture seule", "lecture et écriture" ou "lecture, écriture et message direct" (utilisez l'option la moins intrusive nécessaire pour votre application, pour une connexion OAuth "en lecture seule" est suffisant
  • Sous "Permissions supplémentaires", cochez la case "Demander des adresses e-mail aux utilisateurs" si vous souhaitez que l'adresse e-mail de l'utilisateur soit renvoyée aux données de connexion OAuth (dans la plupart des cas, cochez oui)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.