LinkedIn +电子邮件的这个Oauth流程有什么问题?

时间:2013-02-12 13:37:22

标签: authentication oauth linkedin laravel

我正在laravel中使用oneAuth捆绑包,基于来自Phil Sturgeon的Fuel的NinjAuth,我相信,并试图获取用户的电子邮件地址。

我已经为我的请求添加了适当的范围,并且LinkedIn身份验证屏幕成功地要求用户获得基本个人资料和电子邮件地址的权限..到目前为止,这么好..

可能的问题是:电子邮件字段的正确名称是什么? 我找到了对email-addressemailAddress,'emailaddress` ...

的引用

docs indicate email-address,但它不适合我:)

我正在使用网址: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但是favicon会显示linkedin并且我会在chrome中显示ablank页面:“Error 324 (net::ERR_EMPTY_RESPONSE): The server closed the connection without sending any data.”)

如果上面代码中的电子邮件行被注释掉,我成功收到所有其他详细信息,并且新记录被添加到我的用户表和表oneauth_clients中,但电子邮件自然是空白的。

我一定是想念一些简单的东西!


更新

请求URL与电子邮件地址一起使用,但返回包含emailAddress !!的json对象

如果上面的返回数组代码包含emailAddress ...

,脚本仍会死亡

以下是someone's success story

  

“我分别对库和demo.php进行了两处更改:

     

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

1 个答案:

答案 0 :(得分: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"
  ...

请注意,在第一种情况下,电子邮件在第二个电子邮件地址中命名为电子邮件地址

次要问题是我的代码的缺点 - 现在工作得很好!