OAuthを使用してユーザーのTwitterIDを確認した後、ユーザーの電子メールIDを取得する方法はありますか?


85

私はOAuthを初めて使用し、TwitterAPIで遊んでいます。にリクエストを送信することで、認証後にユーザーの資格情報を取得できますhttp://api.twitter.com/1/account/verify_credentials.xml。応答には、ユーザーID、画面名などが含まれますが、電子メールIDは含まれません。

ユーザーのメールIDを取得することは可能ですか?

更新

特に拡張アクセス許可を要求した場合、Facebookがこの情報を提供すると思います。Twitterに似たものはありますか?


@Philip :: PIは同意し、そうではないと思いますが、小切手に署名した彼に確認して報告したいと思いました。
Manoj Govindan 2010

2
@Philip Potterなぜあなたはこれを言うのですか?電子メールアドレスは、ほとんどのOAuthプロバイダー間の重要な参照ポイントです。サードパーティのログイン機能を備えたWebサイト(このWebサイトなど)があり、ユーザーがTwitterでログインしている場合、使用できる一意の識別子はuser_idのみです。次回ユーザーが来てグーグルでログインした場合、これが以前と同じユーザーであることを知る方法はありません。ただし、2つの異なるサードパーティプロバイダーが電子メールアドレスを提供する場合、それが同じ人物であると確信できます(電子メールアドレスがサードパーティによって確認されている限り)
mulllhausen 2011年

@mulllhausenとにかく、同じ人が異なるメールアカウントを持つことができます。メールオプションがある方がいいです。Twitterがサポートしていないメールアドレスに頼るのではなく、1つのプロバイダーで認証された後、複数のアカウントをペアリングする機能をこれに組み込みます。私はあなたが持っているものでロールを言っているだけです。
Jason Sebring

回答:


106

ユーザーのメールアドレスはAPI経由で取得できません。これは、APIチームによる意図的な設計上の決定です。

更新2015.08.18:

ユーザーにメールアドレスをリクエストすることは可能ですが、アプリをホワイトリストに登録する必要があります。アプリのホワイトリストをリクエストするためのAPI呼び出しとこのフォームの詳細については、https://dev.twitter.com/rest/reference/get/account/verify_credentialsを参照してください


11
バグとして提出できますか?認証されたユーザーのメールアドレスが非常に必要ですか?
iMOBDEV 2011

9
残念ながら、あなたが言ったように、意図的な決定。誰かを認証していて、独自のユーザーデータベースを持っている場合は、(同じ電子メールを持つ)既存のユーザーがすでに存在するかどうかを確認する必要があります。
ケイネビアナ2011年

4
@JigneshBrahmkhatriアプリケーションの既存のユーザーモデルで同じ問題が発生し、電子メールアドレスが必要でした。追加の手順を実行し、不足している情報を入力するためのフォームをユーザーに表示することで、これを修正しました。
ケニーマイヤー

24
@KennyM。これはあまり安全ではありません。自分のものではないアカウントのメールアドレスを入力して、そのアカウントとペアリングすることができます...
Brian Graham

3
ユーザーがTwitterでサインインするときは、メールアドレスも入力するように要求し、アカウントをアクティブ化する前に確認してもらいます。基本的には、パスワードを要求する代わりに、Twitterアカウントを使用させるだけです。
Gus Shortz 2013年

16

OutsourceFactorのPython / Djangoので書かれて、私はoAuth1を経由してユーザ名を取得し、その後、「username@twitter.com」として電子メールを構築さえずり全体で一意であることが保証されています。次に、それをハッシュして、使用してローカルユーザーアカウントに関連付けるための適切なUUIDを取得します。Yahooも同じです。GoogleとFacebookはoAuth2を使用しており、リクエストに応じてメールアドレスを教えてくれます。

1つのアカウントで複数のソーシャルアソシエーションを確保するために、ユーザーがローカルでアカウントを作成してログインした後にのみ、ソーシャルアカウントのアソシエーションを許可します。

したがって、最初にアカウント(ローカルアカウント)を作成する必要があります。その後、任意のソーシャルoAuthプロバイダーを使用して、今後のログインを容易にすることができます。これは私のサイトにとって最高の価値です。

とにかく、あなたはツイッターからいくつかのユニークな形のIDを取得します。だからそれを使ってください。後でまたは協会の前にメールアドレスを尋ねることができます。


4
「将来のログインを容易にするプロバイダー」、私はこれに同意しません。顧客が常に記入することを嫌う非常に大きなフォームを表示して、ローカルアカウントを作成するように依頼することで、すでに問題を抱えているからです。
RJR

@RJRええと、Twitterはあなたにメールアドレスを与えていません。とにかくそれを求めなければなりません。私の場合、パスワードを要求します。あなたは異なる要件を持つサイトを持っているかもしれません、そしてそれも問題ありません。
un33k 2014年

3

メールアドレスは、TwitterのOAuth応答で難読化されています。これは、「Twitterに登録」機能を含めたい人にとって常に大きな問題でした。

最近(2015年初頭)、Twitterは2回目のサービスコールを通じて電子メールアドレスのサポートを追加しましたが、特定の悪用された条件下で。

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

これで可能になりましたが、私の意見では、プロバイダーごとにTwitterのシングルサインオンで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を参照してください


はい、Androidでも同じことをしますが、ウェブでメールアドレスを取得できません。このリンクをたどって
Muhammad Waqas 2015年

1

私の場合、応答を受け取るたびに、すべてのユーザーに対して一意の認証IDを取得し、そのユーザーに対しては毎回同じ認証IDを取得しました。そこで、そのIDを使用してunique_id@twitter.comのようなメールを作成し、それがすでに自分のサイトにあるかどうかを確認して(初めてではない)、ユーザーを登録します。次に、彼が2回目にログインした場合は、もう一度メールを作成して、すでにそこにあるかどうかを確認します。これにより、最初にローカルアカウントを作成させる必要がなく、ログインするために彼を識別できます。


1

これは、LaravelでTwitterユーザーの電子メールを取得する方法の例です。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 2016

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ダイアログを介してユーザーに通知されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.