C'è un modo per ottenere l'ID e-mail di un utente dopo aver verificato la sua identità Twitter utilizzando OAuth?


85

Sono nuovo di OAuth e sto giocando con l'API di Twitter. Sono in grado di recuperare le credenziali di un utente dopo l'autenticazione facendo una richiesta a http://api.twitter.com/1/account/verify_credentials.xml. La risposta contiene l'ID utente, il nome della schermata, ecc. Ma non l'ID e-mail.

È possibile recuperare l'ID e-mail dell'utente?

Aggiornare

Ritengo che Facebook fornisca queste informazioni se richiedi specificamente autorizzazioni estese . C'è qualcosa di simile per Twitter?


@Philip:: PI d'accordo e sospetto che non ci sia, ma volevo verificare e riferire a Colui che firma gli assegni.
Manoj Govindan

2
@Philip Potter perché dici questo? l'indirizzo di posta elettronica è il punto di riferimento chiave tra la maggior parte dei fornitori di oauth. se si dispone di un sito Web con funzionalità di accesso di terze parti (come questo sito Web) e un utente accede con Twitter, l'unico identificatore univoco che può essere utilizzato è user_id. se la prossima volta che l'utente arriva e accede con Google, non hai modo di sapere che questo è lo stesso utente di prima. tuttavia, se due diversi fornitori di terze parti forniscono un indirizzo e-mail, possiamo essere sicuri che si tratti della stessa persona (purché l'indirizzo e-mail sia verificato dalle terze parti)
mulllhausen

@mulllhausen la stessa persona può comunque avere diversi account di posta elettronica. È solo più bello avere l'opzione e-mail. Vorrei incorporare in questo la possibilità di accoppiare più account insieme dopo esserti autenticato tramite un provider invece di fare affidamento sull'indirizzo e-mail che Twitter non supporta. Sto solo dicendo rotola con quello che hai.
Jason Sebring

Risposte:


106

L'indirizzo e-mail dell'utente non può essere recuperato tramite l'API. Questa è una decisione di progettazione deliberata da parte del team API.

AGGIORNAMENTO 2015.08.18:

È possibile richiedere un indirizzo email agli utenti, ma è necessario che la tua app sia autorizzata. Vedi https://dev.twitter.com/rest/reference/get/account/verify_credentials per i dettagli della chiamata API e questo modulo per richiedere la whitelist della tua app.


11
Possiamo segnalarlo come bug, ho estremamente bisogno dell'indirizzo email dell'utente autenticato?
iMOBDEV

9
Peccato e come hai detto, una decisione deliberata . Se si autentica qualcuno e si dispone del proprio database utenti, è necessario verificare se esiste già un utente esistente (con la stessa e-mail).
Keyne Viana

4
@JigneshBrahmkhatri Ho avuto lo stesso problema con il mio modello utente esistente nella mia applicazione che richiedeva un indirizzo e-mail. Ho risolto il problema eseguendo il passaggio aggiuntivo e mostrando all'utente un modulo per completare le informazioni mancanti.
Kenny Meyer

24
@KennyM. Non è molto sicuro, potrei semplicemente digitare l'email di un account che non è il mio ed essere associato a quell'account ...
Brian Graham

3
Quando un utente accede con Twitter, gli chiedo di inserire anche un indirizzo e-mail, quindi chiedergli di verificarlo prima di attivare il proprio account. Fondamentalmente sto solo permettendo loro di usare il loro account Twitter invece di richiedere una password.
Gus Shortz

16

Per OutsourceFactor , che è scritto in Python / Django, ottengo il nome utente tramite oAuth1, quindi costruisco un'e-mail come "nomeutente@twitter.com" che è garantito per essere univoco su Twitter. Quindi l'ho hash per ottenere un bel UUID da utilizzare e associare al mio account utente locale. Stessa cosa per Yahoo. Google e Facebook usano oAuth2 e mi danno l'indirizzo email su richiesta, il che è carino.

Per garantire più associazioni sociali con un singolo account, consento le associazioni di account social SOLO dopo che l'utente ha creato un account localmente ed è connesso.

Quindi, devi prima creare un account (account locale), quindi puoi utilizzare uno qualsiasi dei provider oAuth social per facilitare i tuoi accessi futuri. Questo è il miglior rapporto qualità-prezzo per il mio sito.

Ad ogni modo, ottieni una forma univoca di ID da Twitter. Quindi usalo e basta. Puoi chiedere un indirizzo email successivamente o prima dell'associazione.


4
"fornitori per facilitare i tuoi accessi futuri", non sono d'accordo con questo, perché hai già dato loro problemi chiedendo loro di creare un account locale mostrando un modulo molto grande che il cliente non gradisce sempre compilare.
RJR

@RJR Beh, Twitter non ti sta dando un indirizzo email. Quindi devi chiederlo comunque. Nel mio caso, chiedo anche una password mentre ci sono. Potresti avere un sito con requisiti diversi, e anche questo va bene.
un33k

3

L'indirizzo e-mail viene offuscato da Twitter nelle risposte OAuth. Che è sempre stato un grande problema per le persone che desideravano includere una funzione "Registrati con Twitter".

Più recentemente (all'inizio del 2015), Twitter ha aggiunto il supporto dell'indirizzo e-mail tramite una seconda chiamata di servizio, ma a determinate condizioni abusate.

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

Quindi ora è possibile, ma la mia opinione è di continuare a implementare un single sign-on OAuth ogni provider tranne Twitter. Devono essere boicottati finché non agiscono normalmente, intendo come ogni singolo altro provider OAuth.


3

In Android che utilizza Fabric , richiedo l'indirizzo email dell'utente in questo modo:

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
    }
});

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


sì, faccio la stessa cosa per Android ma non riesco a ottenere l'indirizzo e-mail nel web, invio anche la richiesta di un indirizzo e-mail seguendo questo link dev.twitter.com/rest/reference/get/account/verify_credentials
Muhammad Waqas

1

Nel mio caso, ogni volta che ricevo la risposta ho ottenuto un ID di autenticazione univoco per ogni utente ed è lo stesso per quell'utente ogni volta. Quindi ho usato quell'ID per creare un'e-mail come unique_id@twitter.com e controllare se è già sul mio sito (per la prima volta non lo è) e quindi registrare l'utente. Quindi, se accede la seconda volta, creo di nuovo l'email e controllo se è già presente. Con questo non devo fargli creare prima un account locale e posso identificarlo per accedere.


1

Ecco l'esempio su come ottenere l'email dell'utente Twitter in Laravel e su coditty.com puoi trovare l'esempio completo usando 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]);

1
Un collegamento a una potenziale soluzione è sempre il benvenuto, ma aggiungi un contesto attorno al collegamento in modo che gli altri utenti abbiano un'idea di cosa sia e perché si trovi. Citare sempre la parte più rilevante di un collegamento importante, nel caso in cui il sito di destinazione non sia raggiungibile o rimanga permanentemente offline. Tieni presente che essere poco più di un collegamento a un sito esterno è una possibile ragione per spiegare perché e come vengono eliminate alcune risposte? .
Tunaki

0

Chi ha detto che non è possibile ???

Sono entrato nella mia app iOS dopo aver inserito l'app nella whitelist. Controlla la mia risposta qui .


0

Aggiungi questo codice!

$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

Procedura completa di checkout qui .


0

Chi dice che non puoi ricevere le email degli utenti, la casella di controllo "Richiedi indirizzi email dagli utenti" è disponibile sotto le autorizzazioni dell'app su apps.twitter.com . I campi URL dell'Informativa sulla privacy e URL dei Termini di servizio devono essere completati nelle impostazioni dell'app affinché l'accesso all'indirizzo e-mail possa funzionare. Se abilitato, gli utenti verranno informati tramite la finestra di dialogo oauth / authorize che la tua app può accedere al loro indirizzo email.

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.