Есть ли способ получить идентификатор электронной почты пользователя после проверки его / ее личности в Twitter с помощью OAuth? - PullRequest
85 голосов
/ 30 августа 2010

Я новичок в OAuth и играю с Twitter API. Я могу получить учетные данные пользователя после аутентификации, сделав запрос к http://api.twitter.com/1/account/verify_credentials.xml. Ответ содержит идентификатор пользователя, отображаемое имя и т. Д., Но не идентификатор электронной почты.

Можно ли вообще получить идентификатор электронной почты пользователя?

Обновление

Я полагаю, что Facebook предоставляет эту информацию, если вы специально запрашиваете расширенные разрешения . Есть ли что-то подобное для Твиттера?

Ответы [ 9 ]

106 голосов
/ 02 сентября 2010

Адрес электронной почты пользователя не может быть получен через API. Это продуманное дизайнерское решение команды API.

ОБНОВЛЕНИЕ 2015.08.18:

Можно запросить адрес электронной почты у пользователей, но для этого требуется, чтобы ваше приложение было в белом списке. См. https://dev.twitter.com/rest/reference/get/account/verify_credentials для получения подробной информации о вызове API и этой формы , чтобы запросить белый список вашего приложения.

16 голосов
/ 25 июня 2012

Для OutsourceFactor , который написан на Python / Django, я получаю имя пользователя через oAuth1, затем создаю электронное письмо как «username@twitter.com», которое гарантированно будет уникальным для всего твиттера.Затем я хэширую его, чтобы получить хороший UUID, который будет использоваться и связан с моей локальной учетной записью пользователя.То же самое для Yahoo.Google и Facebook используют oAuth2, и они дают мне адрес электронной почты по запросу, что приятно.

Чтобы обеспечить несколько социальных ассоциаций с одной учетной записью, я разрешаю ассоциации социальных учетных записей ТОЛЬКО после того, как пользователь локально создал учетную запись и вошел в нее.

Итак, сначала необходимо создать учетную запись(локальная учетная запись), затем вы можете использовать любого из социальных провайдеров oAuth, чтобы облегчить ваши будущие входы в систему.Это лучший вариант для моего сайта.

В любом случае, вы получаете уникальную форму ID из твиттера.Так что просто используйте это.Вы можете попросить адрес электронной почты позже или перед ассоциацией.

3 голосов
/ 10 июля 2015

В Android, используя Fabric , я запрашиваю адрес электронной почты пользователя следующим образом:

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

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

3 голосов
/ 29 мая 2015

Адрес электронной почты скрыт Twitter в своих ответах OAuth.Это всегда было большой проблемой для людей, желающих включить функцию «Зарегистрироваться в Твиттере».

Совсем недавно (в начале 2015 года) Twitter добавил поддержку адресов электронной почты посредством второго обращения в службу поддержки, но при определенных злоупотребленияхусловия.

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

Так что теперь это возможно, но мое мнение заключается в том, чтобы продолжать внедрять единый вход OAuth для каждого провайдера, но в твиттере.Они должны быть бойкотированы, пока они не будут действовать нормально, я имею в виду, как и любой другой поставщик OAuth.

1 голос
/ 04 декабря 2016

Вот пример, как получить электронную почту пользователя Twitter в Laravel, а на coditty.com вы можете найти полный пример, используя 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 голос
/ 29 марта 2016

В моем случае каждый раз, когда я получаю ответ, я получаю уникальный идентификатор аутентификации для каждого пользователя и одинаковый для этого пользователя каждый раз. Поэтому я использовал этот идентификатор, чтобы создать электронное письмо, например unique_id@twitter.com, и проверить, есть ли оно уже на моем сайте (впервые нет), а затем зарегистрировать пользователя. Затем, если он заходит второй раз, я просто создаю письмо и проверяю, есть ли оно там. При этом мне не нужно заставлять его сначала создавать локальную учетную запись и идентифицировать его для входа.

0 голосов
/ 21 января 2017

Кто сказал, что вы не можете получать электронную почту пользователей, флажок «Запросить адреса электронной почты от пользователей» доступен в разделе «Разрешения приложений» на apps.twitter.com . Поля URL-адреса Политики конфиденциальности и URL-адреса Условий обслуживания должны быть заполнены в настройках приложения, чтобы доступ к адресу электронной почты работал. Если этот параметр включен, пользователи будут получать в диалоговом окне oauth / authorize сообщение о том, что ваше приложение может получить доступ к их адресу электронной почты.

0 голосов
/ 17 ноября 2016

Добавьте этот код!

$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

Полная процедура оформления заказа здесь .

0 голосов
/ 04 июня 2015

Кто сказал, что это невозможно ???

Я попал в приложение для iOS после внесения в белый список приложения. Проверьте мой ответ здесь .

...