Google plus 谷歌+;登录按钮-无法进行身份验证呼叫
我正在将新的Google+按钮添加到我的应用程序中,在拨打经过身份验证的电话时遇到了一些问题。我已经包括了文档和signin works中描述的html和javascript。我甚至可以看到访问令牌。但是,当我向经过身份验证的端点发出请求时,会得到一个“无效凭据”响应。例如,我正在尝试: gapi.client.oauth2.userinfo.get().execute(函数(resp){console.log(resp);}) 如果我使用常规的GoogleOAuth方法(gapi.auth.authorize()),我可以进行此调用。 这是怎么回事?我做错了什么 我用google+按钮请求userinfo.email和userinfo.profile范围 G+登录的Html:Google plus 谷歌+;登录按钮-无法进行身份验证呼叫,google-plus,google-oauth,Google Plus,Google Oauth,我正在将新的Google+按钮添加到我的应用程序中,在拨打经过身份验证的电话时遇到了一些问题。我已经包括了文档和signin works中描述的html和javascript。我甚至可以看到访问令牌。但是,当我向经过身份验证的端点发出请求时,会得到一个“无效凭据”响应。例如,我正在尝试: gapi.client.oauth2.userinfo.get().execute(函数(resp){console.log(resp);}) 如果我使用常规的GoogleOAuth方法(gapi.auth.a
<span id="signinButton">
<span
class="g-signin"
data-callback="signinCallback"
data-apppackagename="com.mypackage"
data-clientid="myclientID"
data-cookiepolicy="single_host_origin"
data-requestvisibleactions="http://schemas.google.com/AddActivity"
data-scope="https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/devstorage.read_only https://www.googleapis.com/auth/plus.login">
请求用户配置文件:
gapi.client.oauth2.userinfo.get().execute(function(resp) {console.log(resp);});
请求包括带有令牌的授权标头(通过chrome开发工具查看)
更新:
我还尝试在即时模式下使用gapi.auth.authorize()。这不适用于,并返回空响应。当我在immediate mode设置为false的情况下运行此命令时,会出现授权提示(同样,在使用g+按钮进行授权之后)。在这之后,我的授权电话起了作用。下面是我的代码:
gapi.auth.authorize({client_id: 'myClientID', scope: 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/devstorage.read_only',
immediate: mode, response_type: 'token id_token'}, callback);
首先要检查的是确保您正在请求gapi.client.oauth2.userinfo正在查找的范围。作为按钮的一部分,您可以请求其他作用域
使用Chrome之类的网络控制台查看是否有一个Authorized:头随请求一起传递,以及它可能是什么。如果未发送或未定义,则可能未设置令牌本身,在这种情况下,您可能需要使用gapi.auth.setToken()设置身份验证令牌,如中所述,或者只需使用相同的作用域在即时模式下调用gapi.auth.authorize,它应该确保它获得了令牌。首先要检查的是确保您正在请求gapi.client.oauth2.userinfo正在查找的范围。作为按钮的一部分,您可以请求其他作用域
使用Chrome之类的网络控制台查看是否有一个Authorized:头随请求一起传递,以及它可能是什么。如果未发送或未定义,则令牌本身可能未被设置,在这种情况下,您可能需要使用gapi.auth.setToken()设置auth令牌,如中所述,或者使用相同的作用域在立即模式下调用gapi.auth.authorize,这将确保它获得令牌。我构建了一个用例的复制,并在,这对我来说很好。其他一些注意事项:
- 如果您请求
,则不应请求plus.login
,因为它包含在userinfo.profile
中,并且会在授权对话框中创建重复权限。您可以在文档部分找到更多关于这方面的信息plus.login
- 你应该使用
仅为有效的android应用程序提供软件包,否则您可能会在auth对话框中触发500个错误data-apppackagename
- 如果您请求
,则不应请求plus.login
,因为它包含在userinfo.profile
中,并且会在授权对话框中创建重复权限。您可以在文档部分找到更多关于这方面的信息plus.login
- 你应该使用
仅为有效的android应用程序提供软件包,否则您可能会在auth对话框中触发500个错误data-apppackagename
查看此处的更多信息:我已经在android xamarin中使用OAuth2Authenticator完成了google身份验证。这些步骤可能会对您有所帮助 1.在google开发者控制台中注册为webapplication,而不是已安装的应用程序(android)*提供重定向url和有效url(“”),应用程序代码中应使用相同的url 2.身份验证完成后,它将返回访问令牌 3.通过使用access_令牌发出REST请求以获取用户完整信息(“+accessTokenValue+”) 4.反序列化json响应以获取对象中的信息。
检查此处的更多信息:根据g+登录按钮文档,您不必手动设置令牌。不过,我将对此进行检查。已在g+登录按钮中请求了范围。授权标头包含在请求中。我已尝试在即时模式下使用gapi.auth.authorize,但仍然获得“无效凭据”响应。如果包含授权标头,并且该标头与您返回的令牌匹配,则听起来您缺少所需的作用域。作为按钮的一部分,您正在请求哪些作用域?根据g+登录按钮文档,您不必手动设置令牌。不过,我将对此进行检查。作用域已被删除请求包含在g+登录按钮中。授权标头包含在请求中。我已尝试在即时模式下使用gapi.auth.authorize,但仍然获得“无效凭据”响应。如果包含授权标头,并且该标头与您返回的令牌匹配,则听起来您缺少所需的作用域。作为按钮的一部分,您请求的作用域是什么?您是否可以发布您正在使用的代码,包括登录按钮代码、登录回调
gapi.auth.authorize({client_id: 'myClientID', scope: 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/devstorage.read_only',
immediate: mode, response_type: 'token id_token'}, callback);