Twitter oAuth callbackUrl - localhost Entwicklung

111

Hat jemand anderes Schwierigkeiten, die Rückruf-URL von Twitters oAuth zu erhalten, um die lokale Host-Entwicklungsumgebung zu erreichen? Anscheinend wurde es kürzlich deaktiviert. http://code.google.com/p/twitter-api/issues/detail?id=534#c1

Hat jemand eine Problemumgehung. Ich möchte meine Entwicklung nicht wirklich stoppen


quelle
Es hat bei mir funktioniert, indem ich die Twitter-Rückruf-URL auf meine echte Website-URL gesetzt habe. Beim Testen in localhost -> Twitter-Anmeldung auf localhost umgeleitet (anstelle der Website-URL).
Sudhakar Krishnan

Antworten:

134

Alternative 1.

Richten Sie Ihre .hosts (Windows) - oder etc / hosts-Datei so ein, dass eine Live-Domain auf Ihre localhost-IP verweist. sowie:

127.0.0.1 xyz.com

wo xyz.com ist Ihre echte Domain.

Alternative 2.

Außerdem enthält der Artikel den Tipp, alternativ einen URL-Shortener-Dienst zu verwenden. Kürzen Sie Ihre lokale URL und geben Sie das Ergebnis als Rückruf an.

Alternative 3.

Darüber hinaus scheint es zu funktionieren, beispielsweise http://127.0.0.1:8080als Rückruf an Twitter statt http://localhost:8080.

Tony
quelle
3
Könnte dies den folgenden Fehler verursachen: Der Remote-Server hat einen Fehler zurückgegeben: (401) Nicht autorisiert?
DevDave
Wie funktioniert localhost, wenn es keinen Tunnel gibt? Es trifft nicht wirklich Ihre lokale Maschine?
Jack Tuck
@JackTuck Der Rückruf wird vom Browser des Benutzers aufgerufen, nicht von den Servern von Twitter.
flauschig
25

Ich musste das erst letzte Woche machen. Anscheinend localhostfunktioniert es nicht, 127.0.0.1aber Go Figur.

Dies setzt natürlich voraus, dass Sie zwei Apps bei Twitter registrieren, eine für Ihr Leben www.mysite.comund eine für 127.0.0.1.

Adam
quelle
8

Ja, es wurde aufgrund des kürzlich in OAuth gefundenen Sicherheitsproblems deaktiviert. Die einzige Lösung besteht derzeit darin, zwei OAuth-Anwendungen zu erstellen - eine für die Produktion und eine für die Entwicklung. In der Entwicklungsanwendung legen Sie Ihre localhost-Rückruf-URL anstelle der Live-URL fest.

arikfr
quelle
Ich habe es gerade versucht, aber es akzeptiert localhost: 3000 nicht als URL-Format ...
David N. Welton
1
Ja, sie scheinen solche URLs zu filtern. :( Aber die Unterstützung für benutzerdefinierte Rückruf-URLs ist zurück - vielleicht werden sie dort unterstützt.
arikfr
8

Rückruf-URL bearbeitet

http://localhost:8585/logintwitter.aspx

Konvertieren zu

http://127.0.0.1:8585/logintwitter.aspx
Hakkı Eser
quelle
7

So habe ich es gemacht:

Registrierte Rückruf-URL: http://127.0.0.1/Callback.aspx

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

Konfigurationseinstellungen:

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>

Stellen Sie sicher, dass Sie die Eigenschaft 'Dynamische Ports verwenden' Ihres Projekts auf 'false' setzen und stattdessen eine statische Portnummer eingeben. (Ich habe 1066 verwendet).

Ich hoffe das hilft!

ThdK
quelle
7

Verwenden Sie http://smackaho.st

Was es tut, ist eine einfache DNS-Zuordnung zu 127.0.0.1, mit der Sie die Filter auf localhost oder 127.0.0.1 umgehen können:

smackaho.st. 28800 IN A 127.0.0.1

Wenn Sie also auf den Link klicken, wird angezeigt, was Sie auf Ihrem lokalen Webserver haben (und wenn Sie keinen haben, erhalten Sie eine 404). Sie können es natürlich auf jede gewünschte Seite / jeden gewünschten Port einstellen:

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

Mob
quelle
6
smackaho.st ist nicht mehr verfügbar tbaggery.com/2010/03/04/smack-a-ho-st.html . Verwenden Sie stattdessen lvh.me. Es geht direkt zu localhost.
Justin
5

Ich habe mit der Twitter-Rückruf-URL auf meinem lokalen Host gearbeitet. Wenn Sie nicht sicher sind, wie Sie einen virtuellen Host erstellen sollen (dies ist wichtig), verwenden Sie Ampps. Er ist wirklich cool und einfach. In wenigen Schritten haben Sie Ihren eigenen virtuellen Host und dann funktioniert jede URL darauf. Beispielsweise:

  1. Ampps herunterladen und installieren

  2. Neue Domain hinzufügen. (hier können Sie beispielsweise twitter.local festlegen) Dies bedeutet, dass Ihr virtueller Host http: //twitter.local lautet und nach Schritt 3 funktioniert.

  3. Ich arbeite an Win, gehen Sie also zu Ihrer Hostdatei -> C: \ Windows \ System32 \ Drivers \ etc \ hosts und fügen Sie die Zeile 127.0.0.1 twitter.local hinzu

Starten Sie Ihre Ampps neu und Sie können Ihren Rückruf verwenden. Sie können eine beliebige URL angeben, auch wenn Sie eine Framework-MVC verwenden oder die URL neu geschrieben haben.

Ich hoffe das hilft! Prost.

Glibo
quelle
Danke für den Tipp.
Fügen
3

Wenn ich lokal entwickle, richte ich immer einen lokal gehosteten Entwicklernamen ein, der das Projekt widerspiegelt, an dem ich arbeite. Ich habe dies in xampp über xampp \ apache \ conf \ extra \ httpd-vhosts.conf und dann auch in \ Windows \ System32 \ drivers \ etc \ hosts eingerichtet.

Wenn ich also eine lokale Entwickler-Site für example.com einrichte, würde ich sie in diesen beiden Dateien als example.dev einrichten.

Kurze Antwort: Sobald dies richtig eingerichtet ist, können Sie diese URL ( http://example.dev ) einfach so behandeln, als ob sie beim Einrichten Ihrer Twitter-Anwendung live (und nicht lokal) wäre.

Eine ähnliche Antwort wurde hier gegeben: https://dev.twitter.com/discussions/5749

Direktes Zitat (Hervorhebung hinzugefügt):

Sie können jeder gültigen URL einen Domainnamen geben, den wir auf der Seite mit den Anwendungsdetails erkennen. OAuth 1.0a erfordert , dass Sie einen oauth_callback Wert auf dem Anforderungs - Token Schritt des Flusses schicken und wir werden einen akzeptieren dynamische locahost-basierten Rückruf an diesem Schritt .

Das hat für mich wie ein Zauber gewirkt. Hoffe das hilft.

Joe Bergevin
quelle
3

Mit Fiddler geht das sehr bequem :

  • Öffnen Sie das Menü Extras> GASTGEBER ...
  • Fügen Sie eine Zeile wie ein 127.0.0.1 your-production-domain.com, stellen Sie sicher, dass "Neuzuordnung von Anforderungen aktivieren ..." aktiviert ist. Vergiss nicht zu drücken Save.
  • Wenn Sie Zugriff auf Ihren realen Produktionsserver benötigen, beenden Sie einfach Fiddler oder deaktivieren Sie die Neuzuordnung.
  • Wenn Sie Fiddler erneut starten, wird die Neuzuordnung aktiviert (sofern diese Option aktiviert ist).

Ein angenehmer Bonus ist, dass Sie einen benutzerdefinierten Port wie folgt angeben können: 127.0.0.1:3000 your-production-domain.com(Dies ist über die Hosts-Datei nicht möglich). Anstelle von IP können Sie auch einen beliebigen Domainnamen verwenden (z localhost. B. ).

Auf diese Weise ist es möglich (aber nicht erforderlich), Ihre Twitter-App nur einmal zu registrieren (vorausgesetzt, es macht Ihnen nichts aus, dieselben Schlüssel für die lokale Entwicklung und Produktion zu verwenden).

Roman Boiko
quelle
2

Bearbeiten Sie diese Funktion auf TwitterAPIExchange.php in Zeile 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; }
}
Helfer
quelle
Sie können TwitterAPIExchange.php von hier herunterladen github.com/J7mbo/twitter-api-php
Helper
2

Ich hatte die gleiche Herausforderung und konnte localhost nicht als gültige Rückruf-URL angeben. Also habe ich eine einfache Domain erstellt, um uns Entwicklern zu helfen: https://tolocalhost.com

Es leitet jeden Pfad zu Ihrer lokalen Hostdomäne und Ihrem Port weiter, die Sie benötigen. Hoffe, es kann für andere Entwickler von Nutzen sein.

Jørgen
quelle
Ausgezeichnete Ressource, aber Ihre Domain fügt am Ende der URL "/" hinzu, was gelegentlich zu 404 führt. Könnten Sie es bitte beheben? Zum Beispiel wird es als "localhost / somename /? <Response> umgeleitet, aber es sollte" localhost / somename? <Response> sein
Channa
@Channa Ich habe versucht, dies zu reproduzieren, aber es scheint, dass das Skript korrekt funktioniert. Welchen Browser verwenden Sie? Ich habe Chrome, Safari, Firefox ausprobiert und es funktioniert wie erwartet.
Jørgen
Es passiert mir sowohl in Chrome als auch in Firefox. Dies ist der Hostname, den ich auf Ihrer Seite " localhost: 8080 / dashboard / twitterRedirect.jsp " eingegeben habe. Wenn er jedoch umleitet, geht er zu " localhost: 8080 / dashboard / twitterRedirect.jsp / ... ". Bitte beachten Sie das Symbol "/" vor der Frage Kennzeichen. Es wird veranlassen, dass meine App mir 404
Channa
1
@Channa Sie sollten nicht die gesamte URL in das Feld Hostname einfügen. Es heißt: Hostname, nicht URL ;-) Die Idee ist, 'localhost' auf etwas wie: my.localhost.bla überschreiben zu können, dann wird es anstelle von localhost verwendet. In Ihrem Fall muss das Hostfeld localhost sein. Sie setzen den Port auf 8080 und konfigurieren die Umleitung so, dass sie zu folgender Adresse wechselt: tolocalhost.com/dashboard/twitterRedirect.jsp Dies leitet um zu: localhost: 8080 / dashboard / twitterRedirect.jsp
Jørgen
2

Scheint heutzutage http://127.0.0.1auch aufgehört zu arbeiten. Eine einfache Lösung besteht darin, sie zu verwenden, http://localtest.meanstatt http://localhostimmer darauf zu verweisen127.0.0.1 . Sie können sogar eine beliebige Subdomain hinzufügen, auf die immer noch verwiesen wird127.0.0.1

Siehe Website

Aron Einhorn
quelle
1

Setzen Sie callbackurl in der Twitter-App: 127.0.0.1:3000 und setzen Sie WEBrick so, dass es auf 127.0.0.1 anstatt auf 0.0.0.0 bindet

Befehl: Schienen s -b 127.0.0.1

Alok Yadav
quelle
1

Es sieht so aus, als ob Twitter jetzt localhostneben allem, was Sie in den Callback URLEinstellungen haben, zulässt , solange dort ein Wert vorhanden ist.

MrMakeIt
quelle
1

Ich kämpfte damit und folgte einem Dutzend Lösungen. Am Ende musste ich nur noch mit ssl apis auf dem lokalen Host arbeiten:

Zum Download: Datei cacert.pem

In php.ini* Kommentar entfernen und ändern: curl.cainfo = "c:/wamp/bin/php/php5.5.12/cacert.pem"

  • Sie können herausfinden, wo sich Ihre php.iniDatei auf Ihrem Computer befindet, indem Sie ausführenphp --ini in Ihrer CLI ausführen
  • Ich habe meine cacert.pem der Einfachheit halber im selben Verzeichnis wie php.ini abgelegt.
Lewis
quelle
1

Dies sind die Schritte, mit denen ich Facebook mit einer lokalen Anwendung auf meinem Laptop zum Laufen gebracht habe:

  • gehe zu apps.twitter.com
  • Geben Sie den Namen, die App-Beschreibung und die URL Ihrer Site ein. Hinweis: Verwenden Sie für localhost: 8000 127.0.0.1:8000, da erstere nicht funktionieren
  • Geben Sie die Rückruf-URL ein, die Ihrer in TWITTER_REDIRECT_URI Ihrer Anwendung definierten Rückruf-URL entspricht. Hinweis: Beispiel: http://127.0.0.1/login/twitter/callback (localhost funktioniert nicht).
  • Wichtig Geben Sie sowohl die URLs "Datenschutzrichtlinie" als auch "Nutzungsbedingungen" ein, wenn Sie die E-Mail-Adresse des Benutzers anfordern möchten
  • Aktivieren Sie das Kontrollkästchen Bedingungen zustimmen
  • Klicken Sie auf [Twitter-Anwendung erstellen].
  • Wechseln Sie oben zur Registerkarte [Schlüssel und Zugriffstoken]
  • Kopieren Sie den "Consumer Key (API Key)" und "Consumer Secret (API Secret)" in Ihre Anwendung nach TWITTER_KEY und TWITTER_SECRET
  • Klicken Sie auf die Registerkarte "Berechtigungen" und stellen Sie sie entsprechend auf "Nur Lesen", "Lesen und Schreiben" oder "Lesen, Schreiben und Direktnachricht" ein (verwenden Sie die für Ihre Anwendung am wenigsten aufdringliche Option, nur und OAuth-Anmeldung "Nur Lesen" ist ausreichend
  • Aktivieren Sie unter "Zusätzliche Berechtigungen" das Kontrollkästchen "E-Mail-Adressen von Benutzern anfordern", wenn die E-Mail-Adresse des Benutzers an die OAuth-Anmeldedaten zurückgegeben werden soll (in den meisten Fällen aktivieren Sie "Ja").
Kmeixner
quelle