2013-07-14 15 views
22

Jakie są możliwe przyczyny wygaśnięcia tokena (poza tym, że użytkownik cofnął autoryzację aplikacji)?Twitter API - powody "nieważnego lub wygasłego tokena"

Mój problem polega na tym, że mam aplikację z kilkoma tysiącami użytkowników, cała komunikacja w interfejsie API działa doskonale, ale dla niektórych użytkowników otrzymuję błąd invalid or expired token, ale moim początkiem było to, że są to użytkownicy, którzy anulowali uwierzytelnianie w aplikacji, ale Skontaktowałem się z niektórymi z nich i nie cofnęli dostępu.

Jakieś pomysły, jakie inne problemy mogą powodować ten błąd?

+1

Niedawno Twitter zmienił swoje API. Teraz 180 wiadomości mogą być wysyłane na godzinę z zewnętrznego interfejsu API. Jeśli użytkownik przekroczy ten limit, twitter nieuwierzytelnia ich od wysyłania dalszych wiadomości. Sprawdź swoją aplikację, jeśli przekroczy ona limit. –

+2

dziękuję @krishnasahoo Jestem świadomy zmian wprowadzonych w wersji 1.1 API pod względem limitów stawek. ale podczas przekraczania limitu stawki otrzymujesz błąd "limitu stawki", a nie błąd opisany powyżej – Ran

+0

dziękuję za opracowaną odpowiedź, jestem już zaznajomiony z tym, o czym wspomniałeś powyżej i nie sądzę, że to jest problem, ponieważ Gdybym nie był zgodny z jednym z tych problemów, żadne z zgłoszeń API nie przejdzie, a jak wspomniałem, dzieje się tak tylko z małą częścią moich użytkowników. obecnie domyślam się, że dzieje się to z użytkownikami, którzy zmieniają swoją nazwę użytkownika twitter, być może robiąc to, użytkownik jest automatycznie de-uwierzytelniany ze wszystkich aplikacji. – Ran

Odpowiedz

0

Może to być pomocne dla Ciebie. Zmierzyłem ten sam problem.

Proszę znaleźć poniżej fragment kodu fragmencie

$code = $tmhOAuth->user_request(array(
     'method' => 'POST', 
    'url' => $tmhOAuth->url('oauth/access_token', ''), 
    'params' => array(
      'oauth_verifier' => trim($params['oauth_verifier']), 
     ) 
    )); 

    if ($code == 200) { 
     $oauth_creds = $tmhOAuth->extract_params($tmhOAuth->response['response']); 
     // echo '<pre>';print_r($oauth_creds);exit; 


     $tmhOAuth->reconfigure(array_merge($tmhOAuth->config, array(
     'token' => $oauth_creds['oauth_token'], 
      'secret' => $oauth_creds['oauth_token_secret'], 
    ))); 

    $code = $tmhOAuth->user_request(array(
      'url' => $tmhOAuth->url('1.1/account/verify_credentials') 
    )); 


} 
+1

Ten błąd występuje, gdy używany token wygasł lub jest nieprawidłowy. Sprawdź, czy ciągi, których używasz do tokenu dostępu i tajnego tokenu dostępu, są poprawne. Być może nieumyślnie wygasłeś tokeny i musisz je zregenerować. – Amit

+0

aby zrobić to, co opisałem, muszę ponownie wysłać użytkownika do twittera i ponownie go uwierzytelnić, jest to coś, czego chcę uniknąć ... – Ran

0

Czy potwierdził, że tokeny pracował w jednym czasie? W systemie OAuth, nad którym pracowałem, wystąpił błąd w sposobie bezpiecznego przechowywania i pobierania tokenów, które spowodowały uszkodzenie niewielkiego procentu. Jeśli możesz potwierdzić, że tokeny działały w przeszłości, jest to dobry pierwszy krok.

Po odzyskaniu tokenów z magazynu są one niezmienione? Czy to możliwe, że ulegają korupcji tak, jak sobie z nimi radzisz?

Umieść rejestrację, aby śledzić, kiedy tokeny działają i kończy się niepowodzeniem. Czy token kiedykolwiek zaczął działać ponownie po tym, jak się nie udało? Jeśli nie wykorzystasz tokena przez 30 dni, czy wygasa? Dzięki szczegółowemu dziennikowi możesz zacząć identyfikować wygasłe żetony i szukać używanych wzorców, aby wskazać, co może spowodować ich wygaśnięcie.

Należy również zapoznać się z innymi możliwościami. W jaki sposób użytkownicy odwołują tokeny na Twitterze? Czy łatwo jest to zrobić przypadkowo? Czy dla użytkowników, którym nie udało się tokenów, mają inne autoryzowane aplikacje, które również przestały działać?

0

Przede wszystkim miłe pytanie Ran.

Chcę Cię zapytać, czy przeszedłeś przez programistów Twittera?

Czasami staje się niejednoznaczne, który token użyć, ponieważ Twitter dostarcza dwie pary tokenów i biblioteki. Jeden z nich jest tajnym kluczem.

Musisz wybrać token, który zaczyna się od identyfikatora Twitter, po którym następuje łącznik.

Teraz twoje pytanie dotyczy tego błędu u niektórych użytkowników. Oto więc odpowiedź, że sama aplikacja niejednoznacznie wybiera token.

Chociaż może nie być całkiem w porządku, ale zalecam wypróbować to rozwiązanie przynajmniej raz.

1

Możliwe, że użytkownicy ci mają unieważniony dostęp do domeny , a nie. Ale z mojego doświadczenia wynika, że ​​token dostępu może również stracić ważność po tym, jak użytkownik (w testach: ja) zmienił swoje hasło.

Gdy użytkownik to robi, nie można już używać interfejsu REST API ze strumienia API dla zakresu tego użytkownika. Dostosuj swoją aplikację, aby poradzić sobie z tą sytuacją. Unieważnij sesję użytkownika, więc po powrocie do aplikacji może zostać ponownie przekierowany na Twittera, aby rozpocząć nowy proces tokenu dostępu OAuth. Lub wyślij mu e-mail z prośbą o ponowne połączenie. Vimeo/Windows/...to niektóre osoby, które obsługują wygasłe żetony z wiadomościami e-mail.

Miłej zabawy!

15

Sprawdź integralność tokena dostępu w dowolnym momencie, dzwoniąc pod numer GET account/verify_credentials, używając tokena dostępu.

Jego wymienione i badaniami poznałem, że:

Twój token dostępu będzie nieważny, jeśli użytkownik wyraźnie odrzuca wniosek z ustawieniami lub jeśli Twitter administrator zawiesza swoją aplikację . Jeśli twoja aplikacja zostanie zawieszona, na stronie twojej aplikacji pojawi się wiadomość o tym, że została ona zawieszona.

Dlaczego mój token dostępu do serwisu twitter oauth jest nieważny?

Sprawdź ten wpis: invalid/expired access tokens.

Jest jeden post na Google Groups, który mówi:

Nie dostaniesz drugiej szansy, a to jest zgodne z projektem. Żądania OAuth mają unikalny podpis; po przesłaniu konkretnego wniosku nie można go przesłać ponownie pod numer . Jeśli poprawnie wprowadzą pinezkę, wszystko jest w porządku, otrzymasz token dostępu. Jeśli błędnie wprowadzi kod PIN, otrzymasz 401 Nieautoryzowane - czyli , którego oczekiwano. Jeśli jednak spróbują ponownie wprowadzić pinezkę, nawet właściwy pin jest wyświetlany jako nieautoryzowany.

Sprawdź powyższe link dla powyższego odniesienia.

Niektóre propozycje autorstwa twitter pracownika do tego samego problemu:

Chyba są dwie rzeczy chciałbym zaproponować w tym momencie: 1.) Przejdź do ustawienia aplikacji i użyć zakładki „Reset” klucze aby zresetować klucz klienta i klucz tajny , a następnie zaktualizować te wartości w aplikacji i sprawdzić, czy nadal widzisz to samo zachowanie. 2.) Spróbuj przekazać oauth_callback w wywołaniu request_token. Szczerze mówiąc, nie sądzę, aby ta różnica między , ale chcę być tak rygorystyczna, jak tylko mogę tutaj.

także sprawdzić discussion mówiąc:

Musisz użyć oauth_token i oauth_token_secret zwrócony z OAuth/access_token zadzwonić zamiast jednej w ustawieniach aplikacji w dev.twitter.com

+0

dziękuję za dopracowaną odpowiedź, jestem już zaznajomiony z tym, o czym wspomniałeś powyżej i nie sądzę, że to jest problem, ponieważ jeśli nie był zgodny z jednym z tych problemów, żaden z wywołań interfejsu API nie przejdzie i jak wspomniałem, tylko dzieje się z małą częścią moich użytkowników. obecnie domyślam się, że dzieje się to z użytkownikami, którzy zmieniają swoją nazwę użytkownika twitter, być może robiąc to, użytkownik jest automatycznie de-uwierzytelniany ze wszystkich aplikacji. – Ran

+0

Proszę potwierdzić, jeśli użytkownik zmienił tam konto podstawowe informacje. Jeśli jest coś, czego aplikacja twitter nie może zaufać, odrzuci tokeny. Proszę przeczytać API na Twitterze: https://dev.twitter.com/docs/faq. Aby rozwiązać problem, powinieneś przeczytać Rozwiązywanie problemów z OAuth 1.0A - Link - https://dev.twitter.com/discussions/204 –

+0

Użyłem user.accessToken/Secret .. i działało świetnie, teraz powraca niezdefiniowane, ale App AccessToken/Secret nadal działa bez problemu. – Hamza

3

Oprócz komentarzy, które wszyscy inni poczynili, czasami api na twitterze zwróci błąd "nieważny token", gdy token nie stanowi problemu. Zauważyłem to najbardziej, gdy stworzyłem ciąg żądania, który nie parsuje się poprawnie. Na przykład, gdy otrzymałem ten błąd, gdy przechodziłem w screen_name, który miał symbole, które nie były kodowane przez URI.Ja też dostałem, kiedy zdałem w pustych wartości następująco (gdzie kursor jest pusta):

https://api.twitter.com/1/followers.json?cursor=&screen_name=whatevah 

możesz dać nam specyfikę połączeń, które są powracających ten błąd?

0

My God's answer jest poprawna, ale będą dzielić my answer from another question wyjaśniając, jak to może być zegar komputera:

Jeśli przepływ OAuth pracował jeden dzień i braku następnego sprawdzić komputera zegar. Prowadziłem pudełko Włócznika, które w jakiś sposób miało swój czas na dzień wcześniej, co spowodowało, że API Twittera zwróciło {"kod": 89, "wiadomość": "Nieprawidłowy lub wygasły token."}. Może to również pojawić się jako znacznik czasu 401 poza zakresem. Można użyć tego polecenia, aby zaktualizować swój zegar w Ubuntu:

sudo ntpdate time.nist.gov 

Alternative method jeśli ntpdate nie jest dostępna w systemie:

sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z" 
2

byłem coraz ten sam błąd potem zmienił (access_token) to (access_token_key) i pracował dla mnie.

Mam nadzieję, że komuś to pomoże.

0

jeśli twój token dostępu = 738629462149844993-FcWHjfcucCLGEosyGGQ38qI ****** iC nie zapomnij wspomnieć o łączniku (-), po którym następuje identyfikator użytkownika.

Powiązane problemy