已经为此挣扎了好几个小时,文档似乎很糟糕。基本上,我正在尝试使用Portable Contacts API或完整的Contacts API获得对 OAuth2 身份验证用户联系人的读取访问权限。Google最近开始允许 OAuth2。
我可以通过联系人 API 访问用户联系人,方法是首先让用户使用范围进行身份验证:“https://www.google.com/m8/feeds”。然后我可以使用 jQuery 检索他们的前 25 个联系人(显示的代码是CoffeeScript)
$.ajax
url: "https://www.google.com/m8/feeds/contacts/default/full"
dataType: 'jsonp'
data: { access_token: token, alt: 'json-in-script' }
success: (data, status) ->
console.log "The returned data", data
那行得通,我得到了 JSON 数据。然而,几乎令人难以置信的是,谷歌提供的唯一联系顺序(据我所知)是“ lastmodified ”(真的是 wtf?)。我需要更像“顶级朋友”或“最受欢迎”的东西。
这恰好是 Google Portable Contacts API可以做的事情,(耶!)。当然,我似乎无法获得成功的工作请求。
首先,我通过单击此链接让用户使用便携式联系人 API 进行身份验证(注意范围:“https://www-opensocial.googleusercontent.com/api/people”)
<a href="https://accounts.google.com/o/oauth2/authclient_id=457681297736.apps.googleusercontent.com&response_type=token&redirect_uri=http://localhost:3000/team&scope=https://www-opensocial.googleusercontent.com/api/people">Import Google Contacts</a>
这很好用,我得到了一个传回的访问令牌。
接下来我尝试向便携式联系人 API 发送一个 ajax 请求
$.ajax
url: "https://www-opensocial.googleusercontent.com/api/people/@me/@all"
dataType: 'jsonp'
data: { access_token: token, alt: 'json-in-script' }
success: (data, status) ->
console.log "The returned data", data
但这会返回 403 错误
403 (The currently logged in user and/or the gadget requesting data, does not have access to people data.
任何想法我做错了什么?
附录
我在 Google OAuth2 论坛中发现了这个错误报告,该报告建议我们在使用 Portable Contacts API 时需要设置授权标头。所以我这样尝试:
$.ajax
url: "https://www-opensocial.googleusercontent.com/api/people/@me/@all"
dataType: 'jsonp'
data: { access_token: token, alt: 'json-in-script' }
beforeSend: (xhr) ->
xhr.setRequestHeader "Authorization", "OAuth #{token}"
data: { access_token: token }
success: (data, status) ->
console.log "The returned data", data
但这让我遇到了同样的 403 错误:
403 (The currently logged in user and/or the gadget requesting data, does not have access to people data