现在摔跤了好几个小时,Docs似乎很糟糕。基本上,我正在尝试使用Portable Contacts API或完整版Contacts API来获取对OAuth2经过身份验证的用户联系人的读取权限。 Google recently已启动allowing OAuth2。
我可以通过首先让用户对范围进行身份验证来通过Contacts 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便携式联系人API can do,(耶!)。当然,我似乎无法获得成功的工作要求。
首先,我让用户通过点击此链接对便携式联系人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论坛中找到了this bug report,该论坛建议我们在使用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
答案 0 :(得分:6)
问题是您显然无法在JSONP请求上设置请求标头。有关详细信息,请参阅this question上的答案。
据我所知,替代方案是:
谷歌不应该这么困难。