Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.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
Ruby on rails 验证google令牌真实性时未获取所有配置文件信息_Ruby On Rails_Google Api_Omniauth_Google Signin - Fatal编程技术网

Ruby on rails 验证google令牌真实性时未获取所有配置文件信息

Ruby on rails 验证google令牌真实性时未获取所有配置文件信息,ruby-on-rails,google-api,omniauth,google-signin,Ruby On Rails,Google Api,Omniauth,Google Signin,我正在客户端使用omniauth与google帐户连接。一切都很好,我能够得到id_令牌和一些更多的信息,如电子邮件、姓名、姓氏、姓名等 下面是我在app/config/initializer/omniauth.rb中配置提供程序的方式: provider :google_oauth2, ENV['GOOGLE_ID'], ENV['GOOGLE_SECRET'], scope: "profile,email" 然后,作为测试,为了验证id_令牌的真实性,我使用Postman发送了一个POST

我正在客户端使用omniauth与google帐户连接。一切都很好,我能够得到id_令牌和一些更多的信息,如电子邮件、姓名、姓氏、姓名等

下面是我在app/config/initializer/omniauth.rb中配置提供程序的方式:

provider :google_oauth2, ENV['GOOGLE_ID'], ENV['GOOGLE_SECRET'], scope: "profile,email"
然后,作为测试,为了验证id_令牌的真实性,我使用Postman发送了一个POST请求,例如:

https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=x
用我在客户机上得到的id_令牌替换x

我得到了一个有效的答案,例如:

{
  "iss": "accounts.google.com",
  "at_hash": "xxx-xxx",
  "aud": "xxx-xxx.apps.googleusercontent.com",
  "sub": "xxx",
  "email_verified": "true",
  "azp": "xxx-xxx.apps.googleusercontent.com",
  "email": "xxx@gmail.com",
  "iat": "xxx",
  "exp": "xxx",
  "alg": "xxx",
  "kid": "xxx"
}
当我与我的客户连接时,我允许应用程序访问我的个人资料信息和电子邮件,我一直在遵循这本图图:

谁说:

 // These seven fields are only included when the user has granted the "profile" and
 // "email" OAuth scopes to the application.
 "email": "testuser@gmail.com",
 "email_verified": "true",
 "name" : "Test User",
 "picture": "https://lh4.googleusercontent.com/-kYgzyAWpZzJ/ABCDEFGHI/AAAJKLMNOP/tIXL9Ir44LE/s99-c/photo.jpg",
 "given_name": "Test",
 "family_name": "User",
 "locale": "en"
我不明白为什么我无法获取最后5个字段

我正在开发一个API,我希望我的API能够自己填充一个用户模型,只需要获得id_令牌。
我能够在客户端获得这些信息,但我认为这不是客户端的工作,不能将这些额外信息发送到我的API,对吗?

由于您使用ruby进行此操作,因此我建议尝试以下两种方法

  • 尝试将作用域添加为数组[“配置文件”、“电子邮件”]
  • 添加一个额外参数fetch_basic_profile from

  • 令牌调用不包括配置文件信息。。。您可以使用:


    您没有得到的5个字段是什么?你可以发布参数散列吗?我没有“姓名”、“图片”、“给定姓名”、“姓氏”和“区域设置”。我不确定我是否理解您的要求,没有参数散列,我提供的唯一参数是“id_token”我是否正确理解您的问题您可以在浏览器上获取配置文件信息,但不能使用OmniAuth库在服务器端获取配置文件信息。如果是这样,如何配置API端点以使用OAuth?我不熟悉OmniAuth,我说的是API,但问题不在这里,我还没有编写这个特性的服务器端部分。只要id_令牌的验证不起作用,我就不会写它。但是客户端的OmniAuth可能有问题,我在app/config/initializer/OmniAuth.rb中设置了提供程序。它似乎没有考虑“profile”范围。客户端是如何工作的?你在使用谷歌登录库吗?谢谢你的回答,但我刚刚尝试了你的两个建议,结果还是一样的:/