私はOAuthが初めてであり、Twitter APIをいじくり回しています。認証後にhttp://api.Twitter.com/1/account/verify_credentials.xml
。応答には、ユーザーID、スクリーン名などが含まれますが、メールIDは含まれません。
ユーザーのメールIDを取得することはまったく可能ですか?
更新
拡張アクセス許可 を特にリクエストした場合、Facebookはこの情報を提供すると考えています。 Twitterに似たようなものはありますか?
APIを介してユーザーのメールアドレスを取得することはできません。これは、APIチームによる意図的な設計上の決定です。
UPDATE 2015.08.18:
ユーザーにメールアドレスをリクエストすることは可能ですが、アプリをホワイトリストに登録する必要があります。 API呼び出しの詳細については https://dev.Twitter.com/rest/reference/get/account/verify_credentials を、アプリのホワイトリスト登録を要求するには この形式 を参照してください。
OutsourceFactor の場合、Python/Django、oAuth1を介してユーザー名を取得し、メールアドレスを「[email protected]」として作成します。 Twitter全体で一意であり、それからハッシュを使用して、ローカルユーザーアカウントに関連付けられて使用されるNice UUIDを取得します。Yahooと同じことです。GoogleとFacebookはoAuth2を使用します。
1つのアカウントで複数のソーシャルアソシエーションを確保するために、ユーザーがローカルでアカウントを作成してログインした後にのみ、ソーシャルアカウントアソシエーションを許可します。
したがって、最初にアカウント(ローカルアカウント)を作成する必要があります。その後、ソーシャルoAuthプロバイダーのいずれかを使用して、将来のログインを容易にすることができます。 。
とにかく、あなたはTwitterから何らかのユニークな形式のIDを取得します。それを使ってください。後で、または関連付けの前にメールアドレスを要求できます。
メールアドレスは、TwitterのOAuth応答で難読化されています。これは、「Twitterに登録」機能を含めたい人にとって常に大きな問題でした。
より最近(2015年初頭)、Twitterは2回目のサービスコールを通じてメールアドレスのサポートを追加しましたが、特定の悪用された条件の下で。
https://dev.Twitter.com/rest/reference/get/account/verify_credentials
だから今は可能ですが、私の意見はOAuth every-provider-but-Twitterシングルサインオンを実装し続けることです。彼らは正常に行動するまでボイコットしなければなりません。その他OAuthプロバイダー。
Android using 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 を参照してください
私の場合、応答を取得するたびに、すべてのユーザーに対して一意の認証IDを取得し、そのユーザーに対しても同じ認証IDを取得しました。そのため、そのidを使用して[email protected]のようなメールを作成し、それが既に自分のサイトにあるかどうかを確認し(初めてではない)、ユーザーを登録します。その後、彼が2回目にログインする場合、私は再びメールを作成し、すでにメールがそこにあるかどうかを確認します。これにより、最初に彼にローカルアカウントを作成させる必要はなく、ログインするために彼を識別することができます。
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]);
このコードを追加してください!
$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
完全な手順をチェックアウト ここ.
ユーザーのメールを取得できないと言う人は、「ユーザーにメールアドレスをリクエストする」チェックボックスは、 apps.Twitter.com のアプリ権限で利用できます。メールアドレスへのアクセスを機能させるには、アプリの設定でプライバシーポリシーのURLと利用規約のURLフィールドに入力する必要があります。有効にすると、ユーザーは oauth/authorize ダイアログを介して、アプリが自分のメールアドレスにアクセスできることを通知されます。
それは不可能だと誰が言ったのか???
アプリをホワイトリストに登録した後、iOSアプリにアクセスしました。私の答えを確認してください こちら 。