我在Google上的操作中遇到有关帐户关联的问题:
我可以对用户进行身份验证并访问他的电子邮件地址和用户名,但是在此之后如何将用户重定向回Google助手并关闭他经过身份验证的浏览器?
任何帮助将不胜感激!
更新:嘿囚犯非常感谢。 我做了你说的,是的,现在它重定向到google.com,但是当我在模拟器中测试时没有result_code = SUCCESS。
链接是:
https://www.google.co.in/?gws_rd=cr&dcr=0&ei=z77fWbjQGIXxvATs_oqwBA
现在,如果我再次打电话给...,它会显示您关联帐户所需的消息!
在设备中,浏览器会自动关闭并显示SIGNING_IN,但是当我输入意图时,它无法识别。
如果你能指出我正确的方向,那将是很棒的! (我不确定,但我可能会在你提到的令牌交换阶段,但我不知道如何继续!)
更新2:根据要求,我关注的整个流程: 这是我从debugInfo收到的URL:
https://assistant.google.com/services/auth/handoffs/auth/start?account_name=cha***@gmail.com&provider=***_dev&scopes=email&return_url=https://www.google.com/
当我在浏览器中粘贴此请求时,我在授权端点收到的请求是:
ImmutableMultiDict([
('response_type', 'code'),
('client_id', ****.apps.googleusercontent.com'),
('redirect_uri', 'https://oauth-redirect.googleusercontent.com/r/****'),
('scope', 'email'),
('state', ' CtcCQUxWM2ROU3hNMjl4LUItVXhQSGd4THRMLU4yNExnb3lYbGRKQnQwa3NwTVFva19NUWpYNE5jNGJURzIyZFN3RDBXd2d4enFGVWJGb0Q0ZW1vaS1OaFdkaHdhb05HZ2xlWTR6SllKVlRWYktwd09faklyUTVheFhQbGw2dmVKYzVFTk05N3B1QkxaZG41RVdHN0wyTktvRFdCYzFPVFBzM1dQUlFtN2RmM1VtRU4****(state)')
])
我发回的响应(redirect_url):
https://accounts.google.com/o/oauth2/v2/auth?scope=email&response_type=code&redirect_uri=https%3A%2F%2F******.herokuapp.com%2Fcallback%2Fgoogle&client_id=****.apps.googleusercontent.com
当它再次到达我的端点时,请求参数为:
ImmutableMultiDict([
('code', '4/***********')
])
现在我可以访问电子邮件地址和其他详细信息
我从这里重定向的网址:
https://oauth-redirect.googleusercontent.com/r/****?code=abcdefgh&state=CtcCQUxWM2ROU3hNMjl4LUItVXhQSGd4THRMLU4yNExnb3lYbGRKQnQwa3NwTVFva19NUWpYNE5jNGJURzIyZFN3RDBXd2d4enFGVWJGb0Q0ZW1vaS1OaFdkaHdhb05HZ2xlWTR6SllKVlRWYktwd09faklyUTVheFhQbGw2dmVKYzVFTk05N3B1QkxaZG41RVdHN0wyTktvRFdCYzFPVFBzM1dQUlFtN2RmM1VtRU4****(state)
这会将我重定向到:
https://www.google.co.in/?gws_rd=cr&dcr=0&ei=5c_fWdfKNYndvASO7o6ACA
编辑3:我检查了网络日志:
result_code=FAILURE&result_message=Account+linking+failed
我还在AoG中添加了/ token / google作为令牌网址。它在heroku中被检测到但是我从未在我的代码中收到此请求。
注意:我正在使用python flask并在heroku上托管我的应用程序
答案 0 :(得分:3)
对用户进行身份验证后,您需要将临时身份验证代码返回给Google。之后,谷歌将交换此授权码以获取访问令牌和刷新令牌,但您还没有。重要的是,这段代码必须是唯一的,以后,您将能够识别它的用户。该代码应在有限的时间内有效 - 10分钟是一个普遍接受的时间范围。
在Google作为登录过程发送给您的请求中,他们提供了redirect_uri
和state
作为参数。您需要在回复中使用这些内容。 (state
可以是任何东西 - 你不应该关心它是什么,你只需要通过重定向将其发回。它的目的是通过防止重放攻击来提高安全性。)
验证redirect_uri
是否具有表单
https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
YOUR_PROJECT_ID
是......你猜对了,你的项目的ID。您可以在云控制台中找到它。
然后,您将使用一些其他参数将用户重定向到此网址:
https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING
YOUR_PROJECT_ID
如上所述,AUTHORIZATION_CODE
是您生成的代码,STATE_STRING
是您在state
参数中发送的import GoogleTagManager from '../components/google-tag-manager'
参数的值请求。
有关详情,请参阅https://developers.google.com/actions/identity/oauth2-code-flow#handle_user_sign-in