Twitter oAuth callbackUrl - sviluppo localhost


112

Qualcun altro ha difficoltà a ottenere l'URL di callback di Twitters oAuth per raggiungere il proprio ambiente di sviluppo localhost. A quanto pare è stato disabilitato di recente. http://code.google.com/p/twitter-api/issues/detail?id=534#c1

Qualcuno ha una soluzione alternativa. Non voglio davvero fermare il mio sviluppo


Ha funzionato per me impostando l'URL di richiamata di Twitter sul mio vero URL del sito web. Durante il test in localhost -> iscrizione a twitter, reindirizzato a localhost (invece dell'URL del sito web).
Sudhakar Krishnan

Risposte:


135

Alternativa 1.

Configura il tuo file .hosts (Windows) o etc / hosts per puntare un dominio live al tuo IP localhost. ad esempio:

127.0.0.1 xyz.com

dove xyz.com è il tuo vero dominio.

Alternativa 2.

Inoltre, l'articolo fornisce il suggerimento per utilizzare in alternativa un servizio di abbreviazione di URL. Accorcia l'URL locale e fornisci il risultato come richiamata.

Alternativa 3.

Inoltre, sembra che funzioni per fornire ad esempio http://127.0.0.1:8080come callback Twitter, invece di http://localhost:8080.


3
Ciò potrebbe causare il seguente errore: Il server remoto ha restituito un errore: (401) Non autorizzato?
DevDave

Come funziona localhost quando non è presente alcun tunnel? In realtà non colpisce la tua macchina locale?
Jack Tuck

@JackTuck La richiamata viene chiamata dal browser dell'utente, non dai server di Twitter.
soffice

25

Dovevo farlo solo la scorsa settimana. Apparentemente localhostnon funziona, ma 127.0.0.1Go figura.

Questo ovviamente presuppone che tu stia registrando due app con Twitter, una per il tuo live www.mysite.come un'altra per 127.0.0.1.



8

Sì, è stato disabilitato a causa del recente problema di sicurezza riscontrato in OAuth. L'unica soluzione per ora è creare due applicazioni OAuth: una per la produzione e l'altra per lo sviluppo. Nell'applicazione di sviluppo si imposta l'URL di callback dell'host locale invece di quello attivo.


Ho appena provato a farlo, ma non accetta localhost: 3000 come formato URL ...
David N. Welton,

1
Sì, sembrano filtrare tali URL. :( Ma il supporto per gli URL di richiamata personalizzati è tornato - forse sono supportati lì.
arikfr

8

URL di richiamata modificato

http://localhost:8585/logintwitter.aspx

Convertire in

http://127.0.0.1:8585/logintwitter.aspx

7

Ecco come l'ho fatto:

URL di richiamata registrato: 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>

Assicurati di impostare la proprietà "usa porte dinamiche" del tuo progetto su "false" e inserisci invece un numero di porta statica. (Ho usato 1066).

Spero che aiuti!


7

Usa http://smackaho.st

Quello che fa è una semplice associazione DNS a 127.0.0.1 che ti consente di bypassare i filtri su localhost o 127.0.0.1:

smackaho.st. 28800 IN A 127.0.0.1

Quindi, se fai clic sul collegamento, ti verrà visualizzato quello che hai sul tuo server web locale (e se non ne hai uno, otterrai un 404). Ovviamente puoi impostarlo su qualsiasi pagina / porta desideri:

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


6
smackaho.st non è più disponibile tbaggery.com/2010/03/04/smack-a-ho-st.html . Usa invece lvh.me. Va direttamente a localhost.
Justin

5

Stavo lavorando con l'URL di richiamata di Twitter sul mio localhost. Se non sei sicuro di come creare un host virtuale (questo è importante) usa Ampps. È davvero simpatico e facile. In pochi passaggi hai il tuo host virtuale e quindi ogni URL funzionerà su di esso. Per esempio:

  1. scarica e installa ampps

  2. Aggiungi nuovo dominio. (qui puoi impostare ad esempio twitter.local) ciò significa che il tuo host virtuale sarà http: //twitter.local e funzionerà dopo il passaggio 3.

  3. Sto lavorando su Win quindi vai nel tuo file host -> C: \ Windows \ System32 \ Drivers \ etc \ hosts e aggiungi la riga: 127.0.0.1 twitter.local

Riavvia il tuo Ampps e puoi usare la tua richiamata. Puoi specificare qualsiasi URL, anche se stai usando qualche framework MVC o hai la riscrittura dell'URL htaccess.

Spero che questo aiuto! Saluti.


Grazie per il consiglio. Su Linux, aggiungi semplicemente il nome del dominio di sviluppo a / etc / hosts
jeremyvillalobos

3

Quando sviluppo a livello locale, imposto sempre un nome sviluppatore ospitato localmente che rifletta il progetto su cui sto lavorando. L'ho impostato in xampp tramite xampp \ apache \ conf \ extra \ httpd-vhosts.conf e poi anche in \ Windows \ System32 \ drivers \ etc \ hosts.

Quindi, se sto configurando un sito di sviluppo locale per example.com, lo configurerei come example.dev in questi due file.

Risposta breve: una volta impostato correttamente, puoi semplicemente trattare questo URL ( http://example.dev ) come se fosse live (anziché locale) mentre configuri la tua applicazione Twitter.

Una risposta simile è stata data qui: https://dev.twitter.com/discussions/5749

Citazione diretta (enfasi aggiunta):

Puoi fornire qualsiasi URL valido con un nome di dominio che riconosciamo nella pagina dei dettagli dell'applicazione. OAuth 1.0a richiede l'invio di un valore oauth_callback nel passaggio del token di richiesta del flusso e in quel passaggio accetteremo un callback dinamico basato sulla posizione .

Questo ha funzionato come un fascino per me. Spero che questo ti aiuti.


3

Può essere fatto molto comodamente con Fiddler :

  • Aprire il menu Strumenti> HOSTS ...
  • Inserisci una riga del tipo 127.0.0.1 your-production-domain.com, assicurati che "Abilita rimappatura delle richieste ..." sia spuntato. Non dimenticare di premereSave .
  • Se è necessario accedere al tuo server di produzione reale, esci semplicemente da Fiddler o disabilita la rimappatura.
  • Il riavvio di Fiddler attiverà la rimappatura (se selezionata).

Un piacevole bonus è che puoi specificare una porta personalizzata, come questa: 127.0.0.1:3000 your-production-domain.com(sarebbe impossibile ottenere questo tramite il file hosts). Inoltre, al posto dell'IP puoi utilizzare qualsiasi nome di dominio (ad es.localhost ).

In questo modo, è possibile (ma non necessario) registrare la tua app Twitter una sola volta (a condizione che non ti dispiaccia utilizzare le stesse chiavi per lo sviluppo e la produzione locale).


2

modifica questa funzione su TwitterAPIExchange.php alla riga # 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; }
}

Puoi scaricare TwitterAPIExchange.php da qui github.com/J7mbo/twitter-api-php
Helper

2

Ho avuto la stessa sfida e non sono stato in grado di fornire localhost come URL di richiamata valido. Così ho creato un semplice dominio per aiutare noi sviluppatori: https://tolocalhost.com

Reindirizzerà qualsiasi percorso al tuo dominio localhost e alla porta di cui hai bisogno. Spero che possa essere utile ad altri sviluppatori.


Ottima risorsa, ma il tuo dominio aggiunge "/" alla fine dell'URL che in alcune occasioni porta a 404. potresti aggiustarlo per favore? Ad esempio, reindirizza come "localhost / somename /? <response>, ma dovrebbe essere" localhost / somename? <response>
Channa

@ Channa ho provato a riprodurre questo ma sembra che lo script funzioni correttamente. Quale browser utilizzate? Ho provato Chrome, Safari, Firefox e funziona come previsto.
Jørgen

A me succede sia in Chrome che in Firefox. Questo è il nome host che ho inserito nella tua pagina " localhost: 8080 / dashboard / twitterRedirect.jsp " Ma quando reindirizza va a " localhost: 8080 / dashboard / twitterRedirect.jsp / ... " Si prega di notare il simbolo "/" prima della domanda marchio. Farà sì che la mia app mi invii 404
Channa

1
@ Channa non dovresti mettere l'intero URL nel campo hostname. Si chiama: hostname, non URL ;-) L'idea è di essere in grado di sovrascrivere 'localhost' in qualcosa come: my.localhost.bla, quindi lo userà al posto di localhost. Nel tuo caso il campo host deve essere localhost. Si imposta la porta su 8080 e si configura il reindirizzamento in modo che vada a: tolocalhost.com/dashboard/twitterRedirect.jsp questo verrà reindirizzato a: localhost: 8080 / dashboard / twitterRedirect.jsp
Jørgen

2

Sembra che http://127.0.0.1anche oggi abbia smesso di funzionare. Una soluzione semplice è usare http://localtest.meinvece di http://localhostpuntare sempre a 127.0.0.1E puoi persino aggiungere qualsiasi sottodominio arbitrario ad esso, e punterà comunque a127.0.0.1

Vedi sito web


1

imposta callbackurl nell'app Twitter: 127.0.0.1:3000 e imposta WEBrick per il binding su 127.0.0.1 invece di 0.0.0.0

comando: rails s -b 127.0.0.1


1

Sembra che Twitter ora permetta localhostinsieme a tutto ciò che hai nelle Callback URLimpostazioni, purché ci sia un valore lì.


1

Ho lottato con questo e ho seguito una dozzina di soluzioni, alla fine tutto quello che dovevo fare per lavorare con qualsiasi API SSL sull'host locale era:

Vai a scaricare: file cacert.pem

In php.ini* rimuovi commento e modifica: curl.cainfo = "c:/wamp/bin/php/php5.5.12/cacert.pem"

  • Puoi trovare dove si trova il tuo php.inifile sulla tua macchina eseguendophp --ini nella tua CLI
  • Ho posizionato il mio cacert.pem nella stessa directory di php.ini per facilità.

1

Questi sono i passaggi che hanno funzionato per me per far funzionare Facebook con un'applicazione locale sul mio laptop:

  • vai a apps.twitter.com
  • inserisci il nome, la descrizione dell'app e l'URL del tuo sito Nota: per localhost: 8000, usa 127.0.0.1:8000 poiché il primo non funzionerà
  • inserisci l'URL di richiamata corrispondente al tuo URL di richiamata definito in TWITTER_REDIRECT_URI la tua applicazione Nota: ad esempio: http://127.0.0.1/login/twitter/callback (localhost non funzionerà).
  • Importante inserisci gli URL "privacy policy" e "termini di utilizzo" se desideri richiedere l'indirizzo email dell'utente
  • seleziona la casella di controllo accetta i termini
  • fare clic su [Crea la tua applicazione Twitter]
  • passa alla scheda [Chiavi e token di accesso] in alto
  • copia la "Consumer Key (API Key)" e "Consumer Secret (API Secret)" su TWITTER_KEY e TWITTER_SECRET nella tua applicazione
  • fare clic sulla scheda "Autorizzazioni" e impostare in modo appropriato "sola lettura", "lettura e scrittura" o "lettura, scrittura e messaggio diretto" (utilizzare l'opzione meno intrusiva necessaria per la propria applicazione, per l'accesso solo e OAuth "sola lettura" è sufficiente
  • In "Autorizzazioni aggiuntive", seleziona la casella di controllo "Richiedi indirizzi email dagli utenti" se desideri che l'indirizzo email dell'utente venga restituito ai dati di accesso OAuth (nella maggior parte dei casi seleziona Sì)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.