Чи є спосіб отримати ідентифікатор електронної пошти користувача після підтвердження його / її ідентичності у Twitter за допомогою OAuth?


85

Я новачок у OAuth і бавився з Twitter API. Я можу отримати облікові дані користувача після автентифікації, зробивши запит до http://api.twitter.com/1/account/verify_credentials.xml. Відповідь містить ідентифікатор користувача, прізвище тощо, але не ідентифікатор електронної пошти.

Чи можливо взагалі отримати ідентифікатор електронної пошти користувача?

Оновлення

Я вважаю, що Facebook надає цю інформацію, якщо ви спеціально вимагаєте розширених дозволів . Чи є щось подібне для Twitter?


@Philip:: Я погоджуюсь, і я підозрюю, що немає, але я хотів перевірити та повідомити того, хто підпише чеки.
Manoj Govindan

2
@Philip Potter, чому ти це кажеш? електронна адреса є ключовою точкою відліку між більшістю постачальників послуг. якщо у вас є веб-сайт зі сторонніми функціональними можливостями для входу (наприклад, цей веб-сайт), а користувач входить за допомогою Twitter, тоді користувацьким ідентифікатором може бути лише унікальний ідентифікатор, який можна використовувати. якщо наступного разу, коли користувач прийде і увійде в систему за допомогою Google, ви не зможете дізнатися, що це той самий користувач, що і раніше. однак, якщо два різні сторонні постачальники дають адресу електронної пошти, ми можемо бути впевнені, що це одна людина (доки адресу електронної пошти буде підтверджено сторонніми особами)
mulllhausen

@mulllhausen одна і та ж людина може мати різні облікові записи електронної пошти в будь-якому випадку. Це просто приємніше, хоча мати варіант електронної пошти. Я б вирішив цю можливість поєднувати кілька облікових записів разом після того, як ви пройдете автентифікацію через одного постачальника, а не покладаєтесь на електронну адресу, яку Twitter не підтримує. Я просто кажу, рулон з тим, що у вас є.
Джейсон Себрінг,

Відповіді:


106

Електронну адресу користувача неможливо отримати за допомогою API. Це цілеспрямоване дизайнерське рішення командою API.

ОНОВЛЕННЯ 2015.08.18:

Можна запросити електронну адресу у користувачів, але для цього потрібно, щоб ваш додаток був у білому списку. Детальніше про виклик API та цю форму, щоб подати запит на додавання до вашого білого списку, див. Https://dev.twitter.com/rest/reference/get/account/verify_credentials .


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

9
Шкода, і як ви вже сказали, навмисне рішення. Якщо ви підробляєте когось і маєте власну базу даних користувачів, вам потрібно перевірити, чи вже існує існуючий користувач (з тим самим електронним повідомленням).
Кейн Віана,

4
@JigneshBrahmkhatri У моїй програмі була та сама проблема з існуючою моделлю користувача, яка вимагала адресу електронної пошти. Я виправив це, виконавши додатковий крок і показавши користувачеві форму для заповнення відсутньої інформації.
Kenny Meyer

24
@KennyM. Це не дуже безпечно, я міг би просто ввести електронну пошту якогось облікового запису, який не є моїм, і підключитися до цього облікового запису ...
Брайан Грем

3
Коли користувач входить у Twitter, я вимагаю від нього також ввести адресу електронної пошти, а потім попросити їх підтвердити перед активацією свого облікового запису. В основному я просто дозволяю їм використовувати свій обліковий запис у Twitter, а не вимагати пароля.
Гас Шортц,

16

Для OutsourceFactor , який написаний на Python / Django, я отримую ім'я користувача через oAuth1, а потім створюю електронний лист як "username@twitter.com", який гарантовано буде унікальним у Twitter. Тоді я гешую його, щоб отримати приємний UUID, який буде використовуватися і асоціюватися з моїм локальним обліковим записом користувача. Те саме для Yahoo. Google і Facebook використовують oAuth2, і вони надають мені електронну адресу на запит, що приємно.

Щоб забезпечити кілька соціальних асоціацій з одним обліковим записом, я дозволяю асоціації соціальних акаунтів ТІЛЬКИ після того, як користувач створив локальний обліковий запис і ввійшов у систему.

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

У будь-якому випадку, ви отримуєте якусь унікальну форму посвідчення особи від Twitter. Тож просто використовуйте його. Ви можете попросити електронну адресу пізніше або до асоціації.


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


да я зробити те ж саме для андроїд , але не може отримати адресу електронної пошти в Інтернеті я також подати запит на адресу електронної пошти, перейшовши по цьому посиланню dev.twitter.com/rest/reference/get/account/verify_credentials
Мухаммад Waqas

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-адреси Політики конфіденційності та Умови надання послуг повинні бути заповнені в налаштуваннях програми, щоб мати доступ до електронної адреси. Якщо цю опцію ввімкнено, користувачі будуть повідомлені через діалогове вікно oauth / autorize, що ваш додаток може отримати доступ до їх електронної адреси.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.