2

私は、Phil SturgeonによるFuelのNinjAuthに基づいたlaravelのoneAuthバンドルを使用しており、ユーザーの電子メールアドレスを取得しようとしています。

リクエストに適切なスコープを追加しました。LinkedInの認証画面で、基本的なプロファイルとメールアドレスのユーザー権限を正常に要求しています。これまでのところ、とても良いです。

考えられる問題は次のとおりです。電子メールフィールドの適切な名前は何ですか?email-address、、 'メールアドレス`への参照を見つけましたemailAddress...

ドキュメントには示さemail-addressれていますが、私には機能しません:)

私は次のURLを使用しています:https ://api.linkedin.com/v1/people/~:(id,first-name,last-name,headline,member-url-resources,picture-url,location,public- profile-url、email-address)?format = json

これは/bundles/oneauth/libraries/oauth/provider/linkedin.phpからの問題のあるスニペットです

// Create a response from the request
return array(
    'uid'         => array_get($user, 'id'),
    // 'email'       => array_get($user, 'email-address)',
            // 'email'       => array_get($user, 'emailAddress)',
    'name'        => array_get($user, 'firstName').' '.array_get($user, 'lastName'),
    'image'       => array_get($user, 'pictureUrl'),
    'nickname'    => $nickname,
    'description' => array_get($user, 'headline'),
    'location'    => array_get($user, 'location.name'),
    'urls'        => array(
        'linkedin' => $linked_url,
    ),
);

メールフィールドのコメントを外すと、リクエストはなんとか失敗します(URLにはmysite.com/connect/callbackが表示されますが、ファビコンにはLinkedInが表示され、Chromeで空白のページが表示されます: " Error 324 (net::ERR_EMPTY_RESPONSE): The server closed the connection without sending any data.")

上記のコードの電子メール行がコメントアウトされている場合、他のすべての詳細を正常に受信し、usersテーブルとテーブルoneauth_clientsに新しいレコードが追加されますが、電子メールは当然空白です。

シンプルなものが欠けているに違いない!


アップデート

リクエストURLはemail-addressで機能しますが、emailAddressを含むjsonオブジェクトを返します!!

上記の戻り配列コードにemailAddress...が含まれている場合、スクリプトは引き続き停止します。


これが誰かのサクセスストーリーです:

「ライブラリとdemo.phpにそれぞれ次の2つの変更を加えました。

const _URL_REQUEST = 'https://api.linkedin.com/uas/oauth/requestToken?scope=r_basicprofile+r_emailaddress';

$response = $OBJ_linkedin->profile('~:(id,first-name,last-name,picture-url,email-address)');

4

1 に答える 1

5

問題は、リクエスト トークン コールが次のようになっていることでした。

https://api.linkedin.com/v1/people/~:(id,first-name,last-name,headline,member-url-resources,picture-url,location,public-profile-url,email-address)?format=json

しかし、json の応答は次のとおりです。

array(8) {
  ["emailAddress"]=>
  string(18) "email@email.com"
  ["firstName"]=>
  string(3) "Tim"
  ...

最初のケースでは email はemail-addressという名前で、2 番目のケースではemailAddressという名前であることに注意してください。

二次的な問題は私のコードの欠点でした-今では完全に機能しています!

于 2013-02-12T15:16:11.473 に答える