Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google plus 谷歌+;登录按钮-无法进行身份验证呼叫_Google Plus_Google Oauth - Fatal编程技术网

Google plus 谷歌+;登录按钮-无法进行身份验证呼叫

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

我正在将新的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:

<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
    中,并且会在授权对话框中创建重复权限。您可以在文档部分找到更多关于这方面的信息

  • 你应该使用
    data-apppackagename
    仅为有效的android应用程序提供软件包,否则您可能会在auth对话框中触发500个错误


我为您的用例创建了一个副本,并将其记录在中,它对我来说运行良好。其他一些注意事项:

  • 如果您请求
    plus.login
    ,则不应请求
    userinfo.profile
    ,因为它包含在
    plus.login
    中,并且会在授权对话框中创建重复权限。您可以在文档部分找到更多关于这方面的信息

  • 你应该使用
    data-apppackagename
    仅为有效的android应用程序提供软件包,否则您可能会在auth对话框中触发500个错误


我在android xamarin中使用OAuth2Authenticator完成了谷歌认证。这些步骤可能对您有所帮助

1.在google开发者控制台中注册为webapplication,而不是已安装的应用程序(android)*提供重定向url和有效url(“”),应用程序代码中应使用相同的url

2.身份验证完成后,它将返回访问令牌

3.通过使用access_令牌发出REST请求以获取用户完整信息(“+accessTokenValue+”)

4.反序列化json响应以获取对象中的信息。
查看此处的更多信息:

我已经在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);