LinkedIn + 电子邮件的这个 Oauth 流程有啥问题?
Posted
技术标签:
【中文标题】LinkedIn + 电子邮件的这个 Oauth 流程有啥问题?【英文标题】:What's wrong with this Oauth process for LinkedIn + email?LinkedIn + 电子邮件的这个 Oauth 流程有什么问题? 【发布时间】:2013-01-27 20:04:03 【问题描述】:我相信我在 laravel 中使用 oneAuth 包,它基于来自 Phil Sturgeon 的 Fuel 的 NinjAuth,并试图获取用户的电子邮件地址。
我已在我的请求中添加了适当的范围,LinkedIn 身份验证屏幕成功请求用户对基本个人资料和电子邮件地址的许可.. 到目前为止,一切顺利..
一个可能的问题是:电子邮件字段的正确名称是什么?
我找到了对email-address
、emailAddress
、'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 的有问题的 sn-p
// 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.
”)
如果上面代码中的 email 行被注释掉,我成功接收到所有其他详细信息,并在我的 users 表和表 oneauth_clients 中添加了一条新记录,但 email 自然是空白的..
我一定错过了一些简单的东西!
更新
请求 URL 与 email-address 一起使用,但返回一个包含 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】:问题是请求令牌调用是:
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-address,在第二个 emailAddress 中。
次要问题是我的代码存在缺陷 - 现在可以完美运行!
【讨论】:
以上是关于LinkedIn + 电子邮件的这个 Oauth 流程有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章
使用 PHP 从 OAuth REST API 获取 LinkedIn 个人资料
LinkedIn 邀请 API 错误 401 [未经授权]-iPhone sdk