Gibt es eine Möglichkeit, die E-Mail-ID eines Benutzers zu erhalten, nachdem seine Twitter-Identität mit OAuth überprüft wurde?

85

Ich bin neu bei OAuth und habe mit der Twitter-API herumgespielt. Ich kann die Anmeldeinformationen eines Benutzers nach der Authentifizierung abrufen, indem ich eine Anfrage an stelle http://api.twitter.com/1/account/verify_credentials.xml. Die Antwort enthält die Benutzer-ID, den Bildschirmnamen usw., jedoch nicht die E-Mail-ID.

Ist es überhaupt möglich, die E-Mail-ID des Benutzers abzurufen?

Aktualisieren

Ich glaube, Facebook stellt diese Informationen zur Verfügung, wenn Sie ausdrücklich erweiterte Berechtigungen anfordern . Gibt es etwas Ähnliches für Twitter?

Manoj Govindan
quelle
@Philip :: PI stimme zu und ich vermute, dass dies nicht der Fall ist, aber ich wollte es überprüfen und dem Bericht erstatten, der die Schecks unterzeichnet.
Manoj Govindan
2
@ Philip Potter, warum sagst du das? Die E-Mail-Adresse ist der zentrale Bezugspunkt zwischen den meisten oauth-Anbietern. Wenn Sie eine Website mit Anmeldefunktionen von Drittanbietern haben (z. B. diese Website) und sich ein Benutzer mit Twitter anmeldet, kann nur die Benutzer-ID verwendet werden. Wenn der Nutzer das nächste Mal vorbeikommt und sich bei Google anmeldet, können Sie nicht wissen, dass dies derselbe Nutzer wie zuvor ist. Wenn jedoch zwei verschiedene Drittanbieter eine E-Mail-Adresse
angeben,
@mulllhausen die gleiche Person kann sowieso unterschiedliche E-Mail-Konten haben. Es ist nur schöner, die E-Mail-Option zu haben. Ich würde die Möglichkeit nutzen, mehrere Konten miteinander zu koppeln, nachdem Sie über einen Anbieter authentifiziert wurden, anstatt sich auf die E-Mail-Adresse zu verlassen, die Twitter nicht unterstützt. Ich sage nur rollen mit dem, was du hast.
Jason Sebring

Antworten:

106

Die E-Mail-Adresse des Benutzers kann nicht über die API abgerufen werden. Dies ist eine bewusste Entwurfsentscheidung des API-Teams.

UPDATE 2015.08.18:

Es ist möglich, eine E-Mail-Adresse von Benutzern anzufordern, jedoch muss Ihre App auf der Whitelist stehen. Weitere Informationen zum API-Aufruf und in diesem Formular zum Anfordern der Whitelist Ihrer App finden Sie unter https://dev.twitter.com/rest/reference/get/account/verify_credentials .

DWRoelands
quelle
11
Können wir es als Fehler melden, ich brauche dringend die E-Mail-Adresse des authentifizierten Benutzers?
IMOBDEV
9
Schade und wie du gesagt hast, eine bewusste Entscheidung. Wenn Sie jemanden authentifizieren und über eine eigene Benutzerdatenbank verfügen, müssen Sie überprüfen, ob bereits ein vorhandener Benutzer (mit derselben E-Mail-Adresse) vorhanden ist.
Keyne Viana
4
@JigneshBrahmkhatri Ich hatte das gleiche Problem mit meinem vorhandenen Benutzermodell in meiner Anwendung, für das eine E-Mail-Adresse erforderlich war. Ich habe das behoben, indem ich den zusätzlichen Schritt ausgeführt und dem Benutzer ein Formular zum Ausfüllen der fehlenden Informationen gezeigt habe.
Kenny Meyer
24
@ KennyM. Das ist nicht sehr sicher, ich könnte einfach die E-Mail eines Kontos eingeben, das nicht mir gehört, und mit diesem Konto gekoppelt werden ...
Brian Graham
3
Wenn sich ein Benutzer bei Twitter anmeldet, muss er auch eine E-Mail-Adresse eingeben und diese dann überprüfen, bevor er sein Konto aktiviert. Grundsätzlich lasse ich sie nur ihren Twitter-Account verwenden, anstatt ein Passwort zu benötigen.
Gus Shortz
16

Für OutsourceFactor , das in Python / Django geschrieben ist, erhalte ich den Benutzernamen über oAuth1 und erstelle dann eine E-Mail mit dem Namen "[email protected]", die garantiert auf Twitter eindeutig ist. Dann habe ich es gehasht, um eine nette UUID zu erhalten, die verwendet und meinem lokalen Benutzerkonto zugeordnet werden kann. Gleiches gilt für Yahoo. Google und Facebook verwenden oAuth2 und geben mir auf Anfrage die E-Mail-Adresse, was sehr nett ist.

Um mehrere soziale Assoziationen mit einem einzigen Konto sicherzustellen, erlaube ich soziale Kontoassoziationen NUR, nachdem der Benutzer lokal ein Konto erstellt und angemeldet ist.

Sie müssen also zuerst ein Konto erstellen (lokales Konto), dann können Sie einen der sozialen oAuth-Anbieter verwenden, um Ihre zukünftigen Anmeldungen zu vereinfachen. Dies ist der beste Preis für meine Website.

Wie auch immer, Sie erhalten eine einzigartige Form der ID von Twitter. Also benutze es einfach. Sie können später oder vor dem Verein nach einer E-Mail-Adresse fragen.

un33k
quelle
4
"Anbieter, um Ihre zukünftigen Anmeldungen zu vereinfachen", stimme ich dem nicht zu, da Sie ihnen bereits Probleme bereitet haben, indem Sie sie gebeten haben, ein lokales Konto zu erstellen, indem Sie ein sehr großes Formular anzeigen, das der Kunde immer nicht gerne ausfüllt.
RJR
@RJR Nun, Twitter gibt Ihnen keine E-Mail-Adresse. Also muss man sowieso danach fragen. In meinem Fall frage ich auch nach einem Passwort, während ich dabei bin. Möglicherweise haben Sie eine Site mit unterschiedlichen Anforderungen, und das ist auch in Ordnung.
Un33k
3

Die E-Mail-Adresse wird von Twitter in ihren OAuth-Antworten verschleiert. Das war schon immer ein großes Problem für Leute, die eine "Bei Twitter registrieren" -Funktion einbinden möchten.

In jüngerer Zeit (Anfang 2015) hat Twitter die Unterstützung von E-Mail-Adressen durch einen zweiten Serviceabruf hinzugefügt, jedoch unter bestimmten, missbrauchten Bedingungen.

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

Jetzt ist es also möglich, aber ich bin der Meinung, dass weiterhin ein OAuth-Single-Sign-On für jeden Anbieter außer Twitter implementiert wird. Sie müssen boykottiert werden, bis sie normal handeln. Ich meine, wie jeder andere OAuth-Anbieter.

Mondkind
quelle
3

In Android mit Fabric fordere ich die E-Mail-Adresse des Benutzers wie folgt an:

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

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

Paul Muriithi
quelle
Ja, ich mache das Gleiche für Android, kann aber keine E-Mail-Adresse im Web erhalten. Ich sende
Muhammad Waqas
1

In meinem Fall habe ich jedes Mal, wenn ich die Antwort erhalte, eine eindeutige Authentifizierungs-ID für jeden Benutzer und jedes Mal dieselbe für diesen Benutzer. Also habe ich diese ID verwendet, um eine E-Mail wie [email protected] zu erstellen und zu überprüfen, ob diese bereits auf meiner Website vorhanden ist (zum ersten Mal nicht), und dann den Benutzer zu registrieren. Wenn er sich dann zum zweiten Mal anmeldet, erstelle ich die E-Mail erneut und überprüfe, ob sie bereits vorhanden ist. Dadurch muss ich ihn nicht erst dazu bringen, ein lokales Konto zu erstellen, und kann ihn identifizieren, um sich anzumelden.

Mehedi Hasan
quelle
1

Hier ist das Beispiel, wie Sie E-Mails von Twitter-Benutzern in Laravel erhalten. Auf coditty.com finden Sie das vollständige Beispiel mit 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
quelle
1
Ein Link zu einer möglichen Lösung ist immer willkommen. Fügen Sie jedoch einen Kontext um den Link hinzu, damit Ihre Mitbenutzer eine Vorstellung davon haben, was es ist und warum es dort ist. Zitieren Sie immer den relevantesten Teil eines wichtigen Links, falls die Zielwebsite nicht erreichbar ist oder dauerhaft offline ist. Berücksichtigen Sie, dass kaum mehr als ein Link zu einer externen Website ein möglicher Grund dafür ist, warum und wie einige Antworten gelöscht werden. .
Tunaki
0

Wer hat gesagt, dass es nicht möglich ist?

Ich habe meine iOS-App aufgerufen, nachdem ich die App auf die Whitelist gesetzt habe. Überprüfen Sie meine Antwort hier .

NSPratik
quelle
0

Fügen Sie diesen Code hinzu!

$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

Kasse vollständige Prozedur hier .

Pran
quelle
0

Wer sagt, dass Sie keine Benutzer-E-Mails erhalten können ? Das Kontrollkästchen "E-Mail-Adressen von Benutzern anfordern" ist unter den App-Berechtigungen auf apps.twitter.com verfügbar . Die URL-Felder für Datenschutzrichtlinien und Nutzungsbedingungen müssen in den App-Einstellungen ausgefüllt werden, damit der Zugriff auf die E-Mail-Adresse funktioniert. Wenn diese Option aktiviert ist, werden Benutzer über den Dialog " oauth / authorize " darüber informiert, dass Ihre App auf ihre E-Mail-Adresse zugreifen kann.

Emmanuel Ikechukwu
quelle