Twitter oAuth callbackUrl - rozwój hosta lokalnego

112

Czy ktoś inny ma trudności z uzyskaniem adresu URL wywołania zwrotnego Twitters oAuth, aby trafił do środowiska programistycznego hosta lokalnego. Najwyraźniej został ostatnio wyłączony. http://code.google.com/p/twitter-api/issues/detail?id=534#c1

Czy ktoś ma obejście. Naprawdę nie chcę zatrzymywać swojego rozwoju


źródło
Pomogło mi to, ustawiając adres URL wywołania zwrotnego na Twitterze na mój prawdziwy adres URL witryny. Podczas testowania w localhost -> rejestracja na Twitterze, przekierowanie na localhost (zamiast adresu URL strony).
Sudhakar Krishnan

Odpowiedzi:

135

Alternatywa 1.

Skonfiguruj plik .hosts (Windows) lub etc / hosts, aby wskazywać aktywną domenę na adres IP lokalnego hosta. Jak na przykład:

127.0.0.1 xyz.com

gdzie xyz.com to Twoja prawdziwa domena.

Alternatywa 2.

Ponadto artykuł zawiera wskazówkę dotyczącą alternatywnego korzystania z usługi skracania adresów URL. Skróć lokalny adres URL i podaj wynik jako wywołanie zwrotne.

Alternatywa 3.

Ponadto wydaje się, że działa na przykład http://127.0.0.1:8080jako wywołanie zwrotne do Twittera zamiast http://localhost:8080.

Tony
źródło
3
Czy może to powodować następujący błąd: Serwer zdalny zwrócił błąd: (401) Brak autoryzacji?
DevDave
Jak działa localhost, gdy nie ma do niego tunelu? To faktycznie nie trafia do twojego lokalnego komputera?
Jack Tuck
@JackTuck Wywołanie zwrotne jest wywoływane przez przeglądarkę użytkownika, a nie przez serwery Twittera.
puszysty
25

Musiałem to zrobić w zeszłym tygodniu. Najwyraźniej localhostnie działa, ale 127.0.0.1Go się liczy.

To oczywiście zakłada, że ​​rejestrujesz dwie aplikacje na Twitterze, jedną na żywo, www.mysite.coma drugą na 127.0.0.1.

Adam
źródło
8

Tak, została wyłączona z powodu niedawnego problemu z zabezpieczeniami, który wykryto w OAuth. Na razie jedynym rozwiązaniem jest utworzenie dwóch aplikacji OAuth - jednej do produkcji, a drugiej do programowania. W aplikacji programistycznej ustawiasz adres URL wywołania zwrotnego hosta lokalnego zamiast bieżącego.

arikfr
źródło
Właśnie próbowałem to zrobić, ale nie akceptuje localhost: 3000 jako formatu adresu URL ...
David N. Welton
1
Tak, wydaje się, że filtrują takie adresy URL. :( Ale wsparcie dla niestandardowych adresów URL wywołań zwrotnych powróciło - może są tam obsługiwane.
arikfr
8

Edytowano adres URL wywołania zwrotnego

http://localhost:8585/logintwitter.aspx

Konwertuj na

http://127.0.0.1:8585/logintwitter.aspx
Hakkı Eser
źródło
7

Oto jak to zrobiłem:

Zarejestrowany adres URL wywołania zwrotnego: 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>

Upewnij się, że ustawiłeś właściwość „użyj portów dynamicznych” projektu na „fałsz” i zamiast tego wprowadź statyczny numer portu. (Ja użyłem 1066).

Mam nadzieję, że to pomoże!

ThdK
źródło
7

Użyj http://smackaho.st

To, co robi, to proste powiązanie DNS z 127.0.0.1, które pozwala ominąć filtry na hoście lokalnym lub 127.0.0.1:

smackaho.st. 28800 IN A 127.0.0.1

Więc jeśli klikniesz link, wyświetli ci to, co masz na lokalnym serwerze internetowym (a jeśli go nie masz, otrzymasz 404). Możesz oczywiście ustawić dowolną stronę / port:

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

Tłum
źródło
6
Smackaho.st nie jest już dostępny tbaggery.com/2010/03/04/smack-a-ho-st.html . Zamiast tego użyj lvh.me. Przechodzi bezpośrednio do localhost.
Justin
5

Pracowałem z adresem URL wywołania zwrotnego na Twitterze na moim hoście lokalnym. Jeśli nie jesteś pewien, jak utworzyć wirtualnego hosta (jest to ważne), użyj Ampps. Jest naprawdę fajny i łatwy. W kilku krokach masz własnego wirtualnego hosta i wtedy każdy adres URL będzie na nim działał. Na przykład:

  1. pobierz i zainstaluj ampps

  2. Dodaj nową domenę. (tutaj możesz ustawić na przykład twitter.local), co oznacza, że ​​twój wirtualny host będzie http: //twitter.local i będzie działał po kroku 3.

  3. Pracuję na Win, więc przejdź do pliku hosta -> C: \ Windows \ System32 \ Drivers \ etc \ hosts i dodaj wiersz: 127.0.0.1 twitter.local

Zrestartuj swoje Ampps i możesz skorzystać z oddzwaniania. Możesz określić dowolny adres URL, nawet jeśli używasz jakiegoś framework MVC lub masz przepisywanie adresu URL htaccess.

Mam nadzieję, że to pomoże! Twoje zdrowie.

Glibo
źródło
Dzięki za wskazówkę. W systemie Linux wystarczy dodać nazwę domeny deweloperskiej do / etc / hosts
jeremyvillalobos
3

Kiedy rozwijam się lokalnie, zawsze ustawiam nazwę dewelopera na lokalnym serwerze, która odzwierciedla projekt, nad którym pracuję. Ustawiłem to w xampp przez xampp \ apache \ conf \ extra \ httpd-vhosts.conf, a następnie także w \ Windows \ System32 \ drivers \ etc \ hosts.

Więc jeśli konfiguruję lokalną witrynę deweloperów, na przykład example.com, ustawiłbym ją jako example.dev w tych dwóch plikach.

Krótka odpowiedź: Po prawidłowym skonfigurowaniu tego adresu URL ( http://example.dev ) można po prostu traktować tak, jakby był aktywny (a nie lokalny) podczas konfigurowania aplikacji na Twitterze.

Podobną odpowiedź udzielono tutaj: https://dev.twitter.com/discussions/5749

Wycena bezpośrednia (podkreślenie dodane):

Na stronie szczegółów aplikacji możesz podać dowolny prawidłowy adres URL z nazwą domeny, którą rozpoznajemy. OAuth 1.0a wymaga wysłania wartości oauth_callback w kroku tokenu żądania w przepływie, a my zaakceptujemy dynamiczne wywołanie zwrotne oparte na lokalizacji lokalnej w tym kroku .

To zadziałało na mnie jak urok. Mam nadzieję że to pomoże.

Joe Bergevin
źródło
3

Można to zrobić bardzo wygodnie za pomocą Fiddlera :

  • Otwórz menu Narzędzia> HOSTY ...
  • Wstaw wiersz, np. 127.0.0.1 your-production-domain.comUpewnij się, że zaznaczona jest opcja „Włącz ponowne mapowanie żądań ...”. Nie zapomnij nacisnąć Save.
  • Jeśli potrzebny jest dostęp do prawdziwego serwera produkcyjnego, po prostu zamknij program Fiddler lub wyłącz ponowne mapowanie.
  • Ponowne uruchomienie programu Fiddler spowoduje włączenie ponownego mapowania (jeśli jest zaznaczone).

Przyjemną zaletą jest to, że możesz określić niestandardowy port, w następujący sposób: 127.0.0.1:3000 your-production-domain.com(byłoby to niemożliwe do osiągnięcia za pośrednictwem pliku hosts). Ponadto zamiast adresu IP możesz użyć dowolnej nazwy domeny (np localhost.).

W ten sposób można (ale nie jest to konieczne) zarejestrować swoją aplikację na Twitterze tylko raz (pod warunkiem, że nie masz nic przeciwko używaniu tych samych kluczy do lokalnego rozwoju i produkcji).

Roman Boiko
źródło
2

edytuj tę funkcję na TwitterzeAPIExchange.php w wierszu # 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; }
}
Pomocnik
źródło
Możesz pobrać TwitterAPIExchange.php stąd github.com/J7mbo/twitter-api-php
Helper
2

Miałem to samo wyzwanie i nie mogłem podać localhost jako prawidłowego adresu URL wywołania zwrotnego. Dlatego stworzyłem prostą domenę, aby pomóc nam programistom: https://tolocalhost.com

Przekieruje dowolną ścieżkę do domeny hosta lokalnego i portu, którego potrzebujesz. Mam nadzieję, że przyda się innym programistom.

Jørgen
źródło
Doskonały zasób, ale Twoja domena dodaje „/” na końcu adresu URL, co w niektórych przypadkach prowadzi do 404. czy mógłbyś to naprawić? Na przykład przekierowuje jako „localhost / nazwa_domeny /? <odpowiedź>, ale powinno to być„ localhost / nazwa_domeny? <odpowiedź>
Channa,
@Channa Próbowałem to odtworzyć, ale wygląda na to, że skrypt działa poprawnie. Jakiej przeglądarki używasz? Wypróbowałem Chrome, Safari, Firefox i działa zgodnie z oczekiwaniami.
Jørgen,
Zdarza mi się to zarówno w przeglądarce Chrome, jak i Firefox. To jest nazwa hosta, którą umieściłem na twojej stronie " localhost: 8080 / dashboard / twitterRedirect.jsp " Ale kiedy przekierowuje, przechodzi do " localhost: 8080 / dashboard / twitterRedirect.jsp /… " Zwróć uwagę na symbol "/" przed pytaniem znak. Spowoduje to, że moja aplikacja wyśle ​​mi 404
Channa,
1
@Channa nie należy umieszczać całego adresu URL w polu nazwy hosta. Nazywa się: nazwa hosta, a nie adres URL ;-) Chodzi o to, aby móc nadpisać 'localhost' na coś takiego jak: my.localhost.bla, a następnie użyje go zamiast localhost. W twoim przypadku pole hosta musi być localhost. Ustawiasz port na 8080 i konfigurujesz przekierowanie, aby przejść do: tolocalhost.com/dashboard/twitterRedirect.jsp przekieruje to na: localhost: 8080 / dashboard / twitterRedirect.jsp
Jørgen
2

Wydaje się, że w dzisiejszych czasach http://127.0.0.1również przestał działać. Prostym rozwiązaniem jest użycie http://localtest.mezamiast http://localhosttego zawsze wskazywać na 127.0.0.1I możesz nawet dodać do niego dowolną subdomenę, a nadal będzie wskazywać na127.0.0.1

Zobacz witrynę

Aron Einhorn
źródło
1

ustaw callbackurl w aplikacji twitter: 127.0.0.1:3000 i ustaw WEBrick na powiązanie z 127.0.0.1 zamiast 0.0.0.0

polecenie: rails s -b 127.0.0.1

Alok Yadav
źródło
1

Wygląda na to, że Twitter zezwala teraz na to, localhostco masz w Callback URLustawieniach, o ile istnieje tam wartość.

MrMakeIt
źródło
1

Zmagałem się z tym i zastosowałem kilkanaście rozwiązań, ostatecznie wszystko, co musiałem zrobić, aby pracować z dowolnym protokołem SSL na lokalnym hoście, to:

Pobierz: plik cacert.pem

W php.ini* cofnij komentarz i zmień: curl.cainfo = "c:/wamp/bin/php/php5.5.12/cacert.pem"

  • Możesz sprawdzić, gdzie znajduje się php.iniplik na komputerze, uruchamiającphp --ini interfejs CLI
  • Umieściłem mój cacert.pem w tym samym katalogu co php.ini dla ułatwienia.
Chwytak
źródło
1

Oto kroki, które zadziałały, aby Facebook działał z lokalną aplikacją na moim laptopie:

  • goto apps.twitter.com
  • wprowadź nazwę, opis aplikacji i adres URL witryny Uwaga: w przypadku hosta lokalnego: 8000 użyj adresu 127.0.0.1:8000, ponieważ ten pierwszy nie będzie działać
  • wprowadź adres URL wywołania zwrotnego pasujący do adresu URL wywołania zwrotnego zdefiniowanego w TWITTER_REDIRECT_URI aplikacji Uwaga: np .: http://127.0.0.1/login/twitter/callback (localhost nie będzie działać).
  • Ważny aby poprosić o podanie adresu e-mail użytkownika, wprowadź adresy URL „polityki prywatności” i „warunków użytkowania”
  • zaznacz pole wyboru „zaakceptuj warunki”
  • kliknij [Utwórz aplikację na Twitterze]
  • przejdź do zakładki [Keys and Access Tokens] u góry
  • skopiuj „Consumer Key (API Key)” i „Consumer Secret (API Secret)” do TWITTER_KEY i TWITTER_SECRET w swojej aplikacji
  • kliknij kartę „Uprawnienia” i ustaw odpowiednio na „tylko do odczytu”, „czytaj i pisz” lub „czytaj, pisz i kieruj wiadomością” (użyj najmniej uciążliwej opcji wymaganej dla Twojej aplikacji, dla samego i OAuth logowania „tylko do odczytu” jest wystarczający
  • W sekcji „Dodatkowe uprawnienia” zaznacz pole wyboru „Poproś o adresy e-mail od użytkowników”, jeśli chcesz, aby adres e-mail użytkownika został zwrócony do danych logowania OAuth (w większości przypadków zaznacz tak)
Kmeixner
źródło