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


85

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

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

Обновить

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


@Philip:: Я согласен, и я подозреваю, что нет, но я хотел проверить и доложить Тому, Кто подписывает чеки.
Манодж Говиндан

2
@ Филип Поттер, почему ты так говоришь? адрес электронной почты является ключевым ориентиром между большинством провайдеров oauth. если у вас есть веб-сайт со сторонней функцией входа в систему (например, этот веб-сайт), и пользователь входит в систему с помощью Twitter, то единственным уникальным идентификатором, который можно использовать, является user_id. если в следующий раз пользователь придет и войдет в систему с помощью Google, вы не сможете узнать, что это тот же пользователь, что и раньше. однако, если два разных сторонних поставщика предоставляют адрес электронной почты, мы можем быть уверены, что это одно и то же лицо (при условии, что адрес электронной почты подтвержден
третьими

@mulllhausen в любом случае один и тот же человек может иметь разные учетные записи электронной почты. Но лучше иметь электронную почту. Я бы использовал возможность объединить несколько учетных записей вместе после аутентификации через одного провайдера вместо того, чтобы полагаться на адрес электронной почты, который Twitter не поддерживает. Я просто говорю, катайтесь с тем, что у вас есть.
Джейсон Себринг

Ответы:


106

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

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

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


11
Можем ли мы зарегистрировать это как ошибку, мне крайне нужен адрес электронной почты аутентифицированного пользователя?
iMOBDEV

9
Жалко и, как вы сказали, осознанное решение. Если вы авторизуете кого-то и у вас есть собственная база данных пользователей, вам необходимо проверить, существует ли уже существующий пользователь (с тем же адресом электронной почты).
Keyne Viana

4
@JigneshBrahmkhatri У меня была такая же проблема с моей существующей моделью User в моем приложении, для которой требовался адрес электронной почты. Я исправил это, выполнив дополнительный шаг и показав пользователю форму для заполнения недостающей информации.
Кенни Мейер,

24
@KennyM. Это не очень безопасно, я мог бы просто ввести адрес электронной почты какой-нибудь учетной записи, которая мне не принадлежит, и быть привязанным к этой учетной записи ...
Брайан Грэм,

3
Когда пользователь входит в Твиттер, я требую, чтобы он также ввел адрес электронной почты, а затем попросил его подтвердить его перед активацией своей учетной записи. По сути, я просто разрешаю им использовать свою учетную запись Twitter вместо того, чтобы требовать пароль.
Gus Shortz

16

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

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

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

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


4
«провайдеры, чтобы упростить вам вход в систему в будущем», я не согласен с этим, потому что вы уже доставили им проблемы, попросив их создать локальную учетную запись, показывая очень большую форму, которую Клиент всегда не любит заполнять.
RJR

@RJR Ну, Twitter не дает вам адрес электронной почты. Так что вы все равно должны попросить об этом. В моем случае я тоже прошу пароль, пока нахожусь на нем. У вас может быть сайт с другими требованиями, и это тоже нормально.
un33k

3

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

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

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

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


3

В 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


да, я делаю то же самое для Android, но не могу получить адрес электронной почты в Интернете, я также отправляю запрос адреса электронной почты, перейдя
Мухаммад Вакас

1

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


1

Вот пример того, как получить электронную почту пользователя 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
Ссылка на потенциальное решение всегда приветствуется, но, пожалуйста, добавьте контекст вокруг ссылки, чтобы ваши друзья-пользователи имели некоторое представление о том, что это такое и почему. Всегда указывайте наиболее релевантную часть важной ссылки на случай, если целевой сайт недоступен или постоянно отключен. Учтите, что возможная причина того, почему и как удаляются некоторые ответы, - это просто ссылка на внешний сайт ? .
Tunaki

0

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

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


0

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

$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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.