Czy istnieje sposób na uzyskanie identyfikatora e-mail użytkownika po zweryfikowaniu jego tożsamości na Twitterze przy użyciu protokołu OAuth?

85

Jestem nowy w OAuth i bawiłem się API Twittera. Jestem w stanie pobrać poświadczenia użytkownika po uwierzytelnieniu, wysyłając żądanie do http://api.twitter.com/1/account/verify_credentials.xml. Odpowiedź zawiera identyfikator użytkownika, nazwę użytkownika itp., Ale nie zawiera identyfikatora e-mail.

Czy w ogóle można odzyskać identyfikator e-mail użytkownika?

Aktualizacja

Uważam, że Facebook udostępnia te informacje, jeśli wyraźnie poprosisz o rozszerzone uprawnienia . Czy jest coś podobnego na Twitterze?

Manoj Govindan
źródło
@Philip:: PI zgadzam się i podejrzewam, że nie, ale chciałem zweryfikować i zgłosić się do Tego, który podpisuje czeki.
Manoj Govindan
2
@Philip Potter, dlaczego to mówisz? adres e-mail jest kluczowym punktem odniesienia między większością dostawców oauth. Jeśli masz witrynę internetową z funkcją logowania przez stronę trzecią (taką jak ta witryna internetowa) i użytkownik loguje się za pomocą Twittera, wówczas jedynym unikalnym identyfikatorem, którego można użyć, jest identyfikator_użytkownika. jeśli następnym razem pojawi się użytkownik i zaloguje się do Google, nie będziesz mieć możliwości dowiedzenia się, że jest to ten sam użytkownik, co wcześniej. jednak jeśli dwóch różnych dostawców zewnętrznych poda adres e-mail, możemy być pewni, że jest to ta sama osoba (o ile adres e-mail jest zweryfikowany przez strony trzecie)
mulllhausen
@mulllhausen i tak ta sama osoba może mieć różne konta e-mail. Po prostu przyjemniej jest mieć opcję e-mail. Chciałbym włożyć w to możliwość parowania wielu kont po uwierzytelnieniu przez jednego dostawcę zamiast polegać na adresie e-mail, którego Twitter nie obsługuje. Po prostu mówię „roll z tym, co masz”.
Jason Sebring

Odpowiedzi:

106

Nie można pobrać adresu e-mail użytkownika za pośrednictwem interfejsu API. Jest to celowa decyzja zespołu ds. API.

AKTUALIZACJA 2015.08.18:

Możesz poprosić użytkowników o adres e-mail, ale wymaga to umieszczenia Twojej aplikacji na białej liście. Zobacz https://dev.twitter.com/rest/reference/get/account/verify_credentials, aby uzyskać szczegółowe informacje na temat wywołania interfejsu API i tego formularza, aby poprosić o dodanie do białej listy aplikacji.

DWRoelands
źródło
11
Czy możemy zgłosić to jako błąd, bardzo potrzebuję adresu e-mail uwierzytelnionego użytkownika?
iMOBDEV
9
Szkoda i jak powiedziałeś, przemyślana decyzja. Jeśli kogoś autoryzujesz i masz własną bazę danych użytkowników, musisz sprawdzić, czy istniejący użytkownik (z tym samym adresem e-mail) już istnieje.
Keyne Viana,
4
@JigneshBrahmkhatri Miałem ten sam problem z moim istniejącym modelem użytkownika w mojej aplikacji, który wymagał adresu e-mail. Naprawiłem to, przechodząc do dodatkowego kroku i pokazując użytkownikowi formularz do uzupełnienia brakujących informacji.
Kenny Meyer
24
@KennyM. To nie jest zbyt bezpieczne, mógłbym po prostu wpisać adres e-mail konta, które nie jest moje i zostać sparowany z tym kontem ...
Brian Graham
3
Kiedy użytkownik loguje się na Twitterze, wymagam od niego również wpisania adresu e-mail, a następnie poproszenie go o zweryfikowanie go przed aktywacją konta. Po prostu pozwalam im korzystać z konta na Twitterze, zamiast wymagać hasła.
Gus Shortz,
16

W przypadku OutsourceFactor , który jest napisany w Pythonie / Django, otrzymuję nazwę użytkownika za pośrednictwem oAuth1, a następnie konstruuję wiadomość e-mail jako „nazwa_uż[email protected]”, która jest unikalna na całym Twitterze. Następnie haszuję go, aby uzyskać ładny identyfikator UUID, który ma być używany i powiązany z moim lokalnym kontem użytkownika. To samo dotyczy Yahoo. Google i Facebook używają oAuth2 i na żądanie podają mi adres e-mail, co jest miłe.

Aby zapewnić wiele powiązań społecznościowych z jednym kontem, zezwalam na skojarzenia kont społecznościowych TYLKO po tym, jak użytkownik lokalnie utworzy konto i jest zalogowany.

Musisz więc najpierw utworzyć konto (konto lokalne), a następnie możesz użyć dowolnego dostawcy społecznościowej OAuth, aby ułatwić sobie przyszłe logowanie. To najlepsza okazja dla mojej witryny.

W każdym razie otrzymujesz unikalną formę dowodu tożsamości z Twittera. Więc po prostu go użyj. Możesz poprosić o adres e-mail później lub przed skojarzeniem.

un33k
źródło
4
„dostawcy ułatwiają logowanie się w przyszłości”, nie zgadzam się z tym, ponieważ już sprawiłeś im kłopoty, prosząc ich o utworzenie konta lokalnego, pokazując bardzo duży formularz, którego Klient zawsze nie lubi wypełniać.
RJR
@RJR Cóż, Twitter nie podaje adresu e-mail. Więc i tak musisz o to poprosić. W moim przypadku również proszę o hasło, gdy przy tym jestem. Możesz mieć witrynę z różnymi wymaganiami i to też jest w porządku.
Un33k
3

Adres e-mail jest zaciemniany przez Twittera w ich odpowiedziach OAuth. Co zawsze było wielkim problemem dla osób, które chciały włączyć funkcję „Zarejestruj się na Twitterze”.

Niedawno (początek 2015 r.) Twitter dodał obsługę adresu e-mail poprzez drugie wezwanie serwisowe, ale pod pewnymi, nadużywanymi warunkami.

https://dev.twitter.com/rest/reference/get/account/verify_credentials

Więc teraz jest to możliwe, ale moja opinia jest taka, aby kontynuować wdrażanie pojedynczego logowania OAuth dla każdego dostawcy oprócz Twittera. Muszą być bojkotowane, dopóki nie będą działać normalnie, mam na myśli każdego innego dostawcę OAuth.

Księżycowe dziecko
źródło
3

W Androidzie korzystającym z Fabric proszę o adres e-mail użytkownika w następujący sposób:

TwitterAuthClient authClient = new TwitterAuthClient();

authClient.requestEmail(session, new Callback<String>() {

    @Override
    public void success(Result<String> result) {
        // Do something with the result, which provides the email address
    }

    @Override
    public void failure(TwitterException exception) {
      // Do something on failure
    }
});

Zobacz http://docs.fabric.io/android/twitter/request-user-email-address.html

Paul Muriithi
źródło
tak, robię to samo dla Androida, ale nie mogę uzyskać adresu e-mail w sieci, przesyłam również prośbę o adres e-mail, klikając ten link dev.twitter.com/rest/reference/get/account/verify_credentials
Muhammad Waqas
1

W moim przypadku za każdym razem, gdy otrzymuję odpowiedź, otrzymałem unikalny identyfikator uwierzytelnienia dla każdego użytkownika i za każdym razem taki sam dla tego użytkownika. Użyłem więc tego identyfikatora, aby utworzyć wiadomość e-mail, taką jak [email protected] i sprawdzić, czy jest już w mojej witrynie (za pierwszym razem nie ma), a następnie zarejestrować użytkownika. Następnie, jeśli zaloguje się po raz drugi, ponownie tworzę wiadomość e-mail i sprawdzam, czy już tam jest. Dzięki temu nie muszę najpierw zmuszać go do utworzenia konta lokalnego i mogę go zidentyfikować, aby się zalogować.

Mehedi Hasan
źródło
1

Oto przykład, jak uzyskać adres e-mail użytkownika Twittera w Laravel, a na coditty.com możesz znaleźć pełny przykład przy użyciu Angular + Laravel

 // get token secret from db 
        $token = TwitterTokens::where('oauth_token', $request->input('oauth_token'))->first(); 


        // open twitter connection
        $connection = new \Abraham\TwitterOAuth\TwitterOAuth(
                        $this->twitter_consumer_key, 
                        $this->twitter_secret, 
                        $request->input('oauth_token'), 
                        $token->oauth_token_secret// twitter secret from DB
                        );

        // get acces token
        $access_token = $connection->oauth("oauth/access_token", ["oauth_verifier" => $request->input('oauth_verifier')]); 

         // new TwitterOAuth instance to get email
        $twitterOAuth = new \Abraham\TwitterOAuth\TwitterOAuth( $this->twitter_consumer_key, $this->twitter_secret, $access_token['oauth_token'], $access_token['oauth_token_secret'] );

        // Let's get the user's info with email
        $twitterUser = $twitterOAuth->get('account/verify_credentials', ['include_entities' => 'false','include_email'=>'true','skip_status'=>'true',]);


        // output user object from twitter in your Log file
        Log::info(['user'=>$twitterUser]);
Igor Simic
źródło
1
Link do potencjalnego rozwiązania jest zawsze mile widziany, ale dodaj kontekst do niego, aby inni użytkownicy mieli pojęcie, co to jest i dlaczego się tam znajduje. Zawsze cytuj najbardziej odpowiednią część ważnego linku, na wypadek gdyby strona docelowa była nieosiągalna lub została trwale wyłączona. Weź pod uwagę, że fakt, że niewiele więcej niż łącze do zewnętrznej witryny jest możliwym powodem, dlaczego i jak są usuwane niektóre odpowiedzi? .
Tunaki
0

Kto powiedział, że to niemożliwe ???

Mam aplikację na iOS po dodaniu aplikacji do białej listy. Sprawdź moją odpowiedź tutaj .

NSPratik
źródło
0

Dodaj ten kod!

$params = array('include_email' => 'true', 'include_entities' => 'false', 'skip_status' => 'true');

`$data = $connection->get('account/verify_credentials', $params); // get the data`

// getting twitter user profile details $twt_id = $data->id; //twitter user id $twt_email = $data->email; //twitter user email

Pełna procedura kasy tutaj .

Pran
źródło
0

Kto powiedział, że nie możesz otrzymywać e-maili od użytkowników, pole wyboru „Żądaj adresów e-mail od użytkowników” jest dostępne w uprawnieniach aplikacji na apps.twitter.com . Adres URL Polityki prywatności i Adres URL Warunków korzystania z usługi należy wypełnić w ustawieniach aplikacji, aby dostęp do adresu e-mail działał. Jeśli ta opcja jest włączona, użytkownicy zostaną poinformowani za pośrednictwem okna dialogowego oauth / authorize, że Twoja aplikacja może uzyskać dostęp do ich adresów e-mail.

Emmanuel Ikechukwu
źródło