Có cách nào để lấy ID email của người dùng sau khi xác minh danh tính Twitter của họ bằng OAuth không?


85

Tôi mới sử dụng OAuth và đã thử nghiệm với API Twitter. Tôi có thể lấy thông tin đăng nhập của người dùng sau khi xác thực bằng cách đưa ra yêu cầu http://api.twitter.com/1/account/verify_credentials.xml. Phản hồi chứa id người dùng, tên hiển thị, v.v. nhưng không chứa ID email.

Có thể truy xuất ID email của người dùng không?

Cập nhật

Tôi tin rằng Facebook cung cấp thông tin này nếu bạn yêu cầu cụ thể các quyền mở rộng . Có điều gì đó tương tự cho Twitter không?


@Philip:: PI đồng ý và tôi nghi ngờ là không có, nhưng tôi muốn xác minh và báo cáo lại cho Người ký séc.
Manoj Govindan

2
@Philip Potter tại sao bạn lại nói điều này? địa chỉ email là điểm tham chiếu chính giữa hầu hết các nhà cung cấp oauth. nếu bạn có trang web có chức năng đăng nhập của bên thứ ba (chẳng hạn như trang web này) và người dùng đăng nhập bằng twitter, thì chỉ có thể sử dụng mã định danh duy nhất là user_id. Nếu lần sau người dùng đến và đăng nhập bằng google thì bạn không có cách nào biết rằng đây là người dùng giống như lần trước. tuy nhiên nếu hai nhà cung cấp bên thứ 3 khác nhau cung cấp cho một địa chỉ email sau đó chúng ta có thể chắc chắn đó là cùng một người (miễn là các địa chỉ email được xác minh bởi các bên thứ 3)
mulllhausen

@mulllhausen, cùng một người vẫn có thể có các tài khoản email khác nhau. Nó chỉ đẹp hơn mặc dù có tùy chọn email. Tôi sẽ tập trung vào khả năng ghép nối nhiều tài khoản với nhau sau khi bạn được xác thực thông qua một nhà cung cấp thay vì dựa vào địa chỉ email mà twitter không hỗ trợ. Tôi chỉ nói cuộn với những gì bạn có.
Jason Sebring

Câu trả lời:


106

Không thể truy xuất địa chỉ email của người dùng qua API. Đây là một quyết định thiết kế có chủ ý của nhóm API.

CẬP NHẬT 2015.08.18:

Bạn có thể yêu cầu địa chỉ email từ người dùng nhưng yêu cầu ứng dụng của bạn phải được đưa vào danh sách trắng. Xem https://dev.twitter.com/rest/reference/get/account/verify_credentials để biết chi tiết về lệnh gọi API và biểu mẫu này để yêu cầu đưa ứng dụng của bạn vào danh sách trắng.


11
Chúng tôi có thể gửi nó dưới dạng lỗi không, tôi đang rất cần địa chỉ email của người dùng được xác thực?
iMOBDEV

9
Quá tệ và như bạn đã nói, một quyết định có chủ ý . Nếu bạn đang xác thực một ai đó và có cơ sở dữ liệu người dùng của riêng mình, bạn cần kiểm tra xem người dùng hiện tại (có cùng e-mail) đã tồn tại hay chưa.
Keyne Viana

4
@JigneshBrahmkhatri Tôi đã gặp vấn đề tương tự với mô hình Người dùng hiện có trong ứng dụng của tôi yêu cầu địa chỉ e-mail. Tôi đã khắc phục điều đó bằng cách thực hiện thêm bước và hiển thị cho người dùng một biểu mẫu để hoàn thành thông tin còn thiếu.
Kenny Meyer

24
@KennyM. Đó là không phải là rất đảm bảo, tôi chỉ có thể gõ vào email của một số tài khoản đó không phải của tôi và được ghép nối với tài khoản đó ...
Brian Graham

3
Khi người dùng đăng nhập bằng Twitter, tôi cũng yêu cầu họ nhập địa chỉ email, sau đó yêu cầu họ xác minh địa chỉ đó trước khi kích hoạt tài khoản của họ. Về cơ bản, tôi chỉ cho phép họ sử dụng tài khoản Twitter của họ thay vì yêu cầu mật khẩu.
Gus Shortz

16

Đối với OutsourceFactor , được viết bằng Python / Django, tôi lấy tên người dùng qua oAuth1, sau đó tạo một email là "username@twitter.com" được đảm bảo là duy nhất trên twitter. Sau đó, tôi băm nó để có được một UUID đẹp để sử dụng và liên kết với tài khoản người dùng cục bộ của tôi. Điều tương tự đối với Yahoo. Google và Facebook sử dụng oAuth2 và họ cung cấp cho tôi địa chỉ email theo yêu cầu, điều đó thật tuyệt.

Để đảm bảo nhiều liên kết xã hội với một tài khoản duy nhất, tôi CHỈ cho phép các liên kết tài khoản xã hội sau khi người dùng đã tạo cục bộ tài khoản và đăng nhập.

Vì vậy, trước tiên bạn phải tạo một tài khoản (tài khoản cục bộ), sau đó bạn có thể sử dụng bất kỳ nhà cung cấp oAuth xã hội nào để dễ dàng đăng nhập trong tương lai. Đây là tiếng nổ tốt nhất cho trang web của tôi.

Dù sao, bạn sẽ nhận được một số dạng ID duy nhất từ ​​twitter. Vì vậy, chỉ cần sử dụng nó. Bạn có thể yêu cầu địa chỉ email sau hoặc trước hiệp hội.


4
"nhà cung cấp để dễ dàng đăng nhập trong tương lai của bạn", tôi không đồng ý với điều này, bởi vì bạn đã gây rắc rối cho họ khi yêu cầu họ tạo một tài khoản cục bộ bằng cách hiển thị một biểu mẫu rất lớn mà Khách hàng luôn không thích điền.
RJR

@RJR Chà, Twitter không cung cấp cho bạn địa chỉ email. Vì vậy, bạn phải yêu cầu nó dù sao. Trong trường hợp của tôi, tôi cũng yêu cầu mật khẩu khi tôi đang ở đó. Bạn có thể có một trang web với các yêu cầu khác nhau, và điều đó cũng tốt.
un33k

3

Địa chỉ email bị Twitter làm xáo trộn trong phản hồi OAuth của họ. Luôn luôn là một vấn đề lớn đối với những người muốn bao gồm chức năng "Đăng ký với Twitter".

Gần đây hơn (đầu năm 2015), Twitter đã thêm hỗ trợ địa chỉ email thông qua cuộc gọi dịch vụ thứ hai, nhưng theo một số điều kiện nhất định, bị lạm dụng.

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

Vì vậy, bây giờ có thể, nhưng ý kiến ​​của tôi là tiếp tục triển khai đăng nhập một lần OAuth mọi nhà cung cấp nhưng twitter. Họ phải bị tẩy chay cho đến khi họ hoạt động bình thường, ý tôi là giống như mọi nhà cung cấp OAuth khác.


3

Trong Android sử dụng Fabric , tôi yêu cầu địa chỉ email của người dùng như sau:

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

Xem http://docs.fainst.io/android/twitter/request-user-email-address.html


yes i làm điều tương tự cho Android nhưng không thể có được địa chỉ email trong web tôi cũng đưa ra yêu cầu về địa chỉ email bằng cách nhấp vào liên kết này dev.twitter.com/rest/reference/get/account/verify_credentials
Muhammad Waqas

1

Trong trường hợp của tôi, mỗi khi nhận được phản hồi, tôi nhận được một id xác thực duy nhất cho mọi người dùng và id xác thực đó cho người dùng đó mọi lúc. Vì vậy, tôi đã sử dụng id đó để tạo một email như unique_id@twitter.com và kiểm tra xem nó đã có trên trang web của tôi chưa (lần đầu tiên chưa) rồi đăng ký người dùng. Sau đó, nếu anh ta đăng nhập lần thứ hai, tôi chỉ cần tạo lại email và kiểm tra xem nó đã ở đó chưa. Bằng cách này, tôi không phải bắt anh ta tạo một tài khoản cục bộ trước và có thể xác định anh ta để đăng nhập.


1

Đây là ví dụ về cách lấy email của người dùng twitter trong Laravel và trên coditty.com, bạn có thể tìm thấy ví dụ đầy đủ bằng 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
Liên kết đến một giải pháp tiềm năng luôn được hoan nghênh, nhưng vui lòng thêm ngữ cảnh xung quanh liên kết để những người dùng đồng nghiệp của bạn sẽ biết nó là gì và tại sao nó ở đó. Luôn trích dẫn phần có liên quan nhất của một liên kết quan trọng, trong trường hợp trang web mục tiêu không thể truy cập được hoặc vĩnh viễn ngoại tuyến. Hãy lưu ý rằng việc chỉ có nhiều hơn một liên kết đến một trang web bên ngoài là một lý do có thể là Tại sao và làm thế nào một số câu trả lời bị xóa? .
Tunaki

0

Ai nói là không được ???

Tôi đã nhận được Ứng dụng iOS của mình sau khi đưa Ứng dụng vào danh sách trắng. Kiểm tra câu trả lời của tôi ở đây .


0

Thêm mã này!

$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

Kiểm tra thủ tục đầy đủ tại đây .


0

Ai nói rằng bạn không thể nhận được email của người dùng, hộp kiểm "Yêu cầu địa chỉ email từ người dùng" có sẵn theo quyền ứng dụng trên apps.twitter.com . Các trường URL của Chính sách Bảo mật và Điều khoản Dịch vụ phải được hoàn thành trong cài đặt ứng dụng để địa chỉ email có thể hoạt động. Nếu được bật, người dùng sẽ được thông báo qua hộp thoại oauth / ủy quyền rằng ứng dụng của bạn có thể truy cập địa chỉ email của họ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.