我在客户端使用omniauth连接谷歌帐户。一切都运行良好,我能够获得id_token和更多信息,如电子邮件,姓名,family_name,given_name等......
以下是我在app / config / initializer / omniauth.rb中配置提供程序的方法:
provider :google_oauth2, ENV['GOOGLE_ID'], ENV['GOOGLE_SECRET'], scope: "profile,email"
然后,作为测试,验证id_token的真实性,使用Postman我发送一个POST请求,如:
https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=x
用我在客户端上的id_token替换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"
}
当我与客户端连接时,我允许应用程序访问我的个人资料信息和我的电子邮件,我一直在关注这个tuto:
https://developers.google.com/identity/sign-in/web/backend-auth
谁说:
// 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_token来自行填充用户模型。 我能够在客户端获取这些信息,但我认为将这些额外信息发送到我的API不是客户端工作吗?
答案 0 :(得分:1)
令牌调用不包含个人资料信息......您可以使用:
https://www.googleapis.com/plus/v1/people/me/openIdConnect?access_token=YOUR_ACCESS_TOKEN
答案 1 :(得分:0)
由于你使用ruby进行此操作,我可以建议尝试两件事