OAuth를 사용하여 트위터 신원을 확인한 후 사용자의 이메일 ID를 얻을 수있는 방법이 있나요?


85

저는 OAuth를 처음 사용하고 Twitter API를 가지고 놀았습니다. 에 요청하여 인증 후 사용자의 자격 증명을 가져올 수 http://api.twitter.com/1/account/verify_credentials.xml있습니다. 응답에는 사용자 ID, 화면 이름 등이 포함되지만 이메일 ID는 포함되지 않습니다.

사용자의 이메일 ID를 검색 할 수 있습니까?

최신 정보

특별히 확장 된 권한을 요청하면 Facebook이이 정보를 제공한다고 생각합니다 . 트위터에도 비슷한 것이 있습니까?


@Philip : : PI는 동의하고 그렇지 않다고 생각하지만 수표에 서명하는 사람을 확인하고보고하고 싶습니다.
Manoj Govindan

2
@Philip Potter 왜 이렇게 말합니까? 이메일 주소는 대부분의 oauth 제공 업체 간의 핵심 참조 지점입니다. 타사 로그인 기능이있는 웹 사이트 (예 :이 웹 사이트)가 있고 사용자가 트위터로 로그인하는 경우 사용할 수있는 고유 식별자 만 user_id입니다. 다음에 사용자가 와서 Google에 로그인하면 이전과 동일한 사용자라는 것을 알 수 없습니다. 그러나 두 개의 다른 제 3 자 제공 업체가 이메일 주소를 제공하면 동일한 사람인지 확인할 수 있습니다 (제 3자가 이메일 주소를 확인하는 한)
mulllhausen 2011-06-29

@mulllhausen 같은 사람이 어쨌든 다른 이메일 계정을 가질 수 있습니다. 이메일 옵션을 사용하는 것이 더 좋습니다. 트위터가 지원하지 않는 이메일 주소에 의존하는 대신 하나의 공급자를 통해 인증 된 후 여러 계정을 함께 페어링하는 기능을 활용합니다. 나는 단지 당신이 가진 것으로 롤을 말하는 것입니다.
Jason Sebring 2013 년

답변:


106

사용자의 이메일 주소는 API를 통해 검색 할 수 없습니다. 이것은 API 팀의 의도적 인 설계 결정입니다.

업데이트 2015.08.18 :

사용자에게 이메일 주소를 요청할 수 있지만 앱이 허용 목록에 있어야합니다. API 호출에 대한 자세한 내용은 https://dev.twitter.com/rest/reference/get/account/verify_credentials 를 참조하고 앱의 허용 목록을 요청하려면 이 양식 을 참조 하세요 .


11
인증 된 사용자의 이메일 주소가 매우 필요합니다. 버그로 신고 할 수 있습니까?
iMOBDEV

9
너무 나쁘고 말했듯이 고의적 인 결정입니다. 누군가를 감성하고 자신의 사용자 데이터베이스를 가지고있는 경우 기존 사용자 (동일한 이메일 사용)가 이미 존재하는지 확인해야합니다.
Keyne Viana 2011

4
@JigneshBrahmkhatri 이메일 주소가 필요한 애플리케이션의 기존 사용자 모델과 동일한 문제가 발생했습니다. 추가 단계로 이동하여 사용자에게 누락 된 정보를 완료하는 양식을 표시하여 문제를 해결했습니다.
Kenny Meyer

24
@KennyM. 매우 보안이 아니라고, 난 그냥 ... 내 아닌 일부 계정의 이메일에 입력 할 수 및 해당 계정에 페어링 할 수
브라이언 그레이엄

3
사용자가 Twitter로 로그인 할 때 이메일 주소도 입력 한 다음 계정을 활성화하기 전에 확인하도록 요구합니다. 기본적으로 비밀번호를 요구하는 대신 Twitter 계정을 사용하도록 허용합니다.
Gus Shortz 2013-06-20

16

들어 OutsourceFactor 파이썬 / 장고로 작성된 것입니다, 내가 oAuth1를 통해 사용자 이름을 얻을, 다음 "username@twitter.com"트위터에서 고유 보장되는으로 이메일을 구축합니다. 그런 다음 멋진 UUID를 사용하고 로컬 사용자 계정과 연결하기 위해 해시합니다. Yahoo도 마찬가지입니다. Google과 Facebook은 oAuth2를 사용하며 요청시 이메일 주소를 제공합니다.

단일 계정으로 여러 소셜 연결을 보장하기 위해 사용자가 로컬에서 계정을 만들고 로그인 한 후에 만 ​​소셜 계정 연결을 허용합니다.

따라서 먼저 계정 (로컬 계정)을 생성 한 다음 소셜 oAuth 공급자를 사용하여 향후 로그인을 용이하게 할 수 있습니다. 이것은 내 사이트에 대한 최고의 가격입니다.

어쨌든 트위터에서 고유 한 형태의 ID를 얻습니다. 그러니 그냥 사용하세요. 나중에 또는 연결 전에 이메일 주소를 요청할 수 있습니다.


4
"향후 로그인을 용이하게하기위한 공급자"는 동의하지 않습니다. 고객이 항상 작성하기를 싫어하는 매우 큰 양식을 표시하여 로컬 계정을 만들도록 요청하여 이미 문제를 주었기 때문입니다.
RJR

@RJR 음, Twitter는 이메일 주소를 제공하지 않습니다. 그래서 어쨌든 그것을 요청해야합니다. 제 경우에는 비밀번호를 요청합니다. 요구 사항이 다른 사이트가있을 수 있으며 이것도 괜찮습니다.
un33k

3

트위터는 OAuth 응답에서 이메일 주소를 난독 화합니다. "Twitter로 등록"기능을 포함하려는 사람들에게 항상 큰 문제였습니다.

더 최근 (2015 년 초), 트위터는 두 번째 서비스 콜을 통해 이메일 주소 지원을 추가했지만 특정 상황에서 악용되었습니다.

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

이제 가능하지만 내 의견은 OAuth 모든 공급자이지만 트위터 단일 사인온을 계속 구현하는 것입니다. 그들은 정상적으로 행동 할 때까지 보이콧되어야합니다. 즉, 다른 모든 OAuth 공급자와 마찬가지로 말입니다.


3

Fabric을 사용하는 Android에서 다음과 같이 사용자의 이메일 주소를 요청합니다.

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을
무하마드와 커스

1

제 경우에는 응답을받을 때마다 모든 사용자에 대해 고유 한 인증 ID를 받았으며 매번 해당 사용자에 대해 동일합니다. 그래서 나는 그 ID를 사용하여 unique_id@twitter.com과 같은 이메일을 만들고 그것이 이미 내 사이트에 있는지 (처음에는 그렇지 않은지) 확인한 다음 사용자를 등록했습니다. 그런 다음 두 번째로 로그인하면 이메일을 다시 만들고 이미 거기에 있는지 확인합니다. 이것으로 나는 그가 먼저 로컬 계정을 만들도록 할 필요가 없으며 로그인하기 위해 그를 식별 할 수 있습니다.


1

방법은 다음과 같습니다 Laravel에서 트위터 사용자 이메일을 얻을 수있는 예이며,에하는 coditty.com 당신은 각도 + 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

이 코드를 추가하십시오!

$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 / 승인 대화 상자를 통해 알립니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.