我现在正尝试使用google oauth api允许Google用户登录我的应用。我一直关注谷歌的OAuth2Login文档。
我用它来获取代码,它运行得很好。
var u = 'https://accounts.google.com/o/oauth2/auth?'
+ '&response_type=code'
+ '&client_id=' + opts.googleClient
+ '&redirect_uri=' + redirectURI
+ '&scope=' + opts.scope
+ '&approval_prompt=force&access_type=offline';
但是当我尝试使用/o/oauth2/token
api获取access_token时,如下所示:
var u = 'https://accounts.google.com/o/oauth2/token?'
+ 'code=' + code
+ '&client_id=' + opts.googleClient
+ '&client_secret=' + opts.googleSecret
+ '&scope='
+ '&redirect_uri=' + redirectURI
+ '&grant_type=' + 'authorization_code';
request.post({url: u, json: true}, fn);
它让我回来了
{
error: "invalid_request"
}
我已使用网络栏中的Chrome开发者工具检查了这一点,该工具指示请求网址为https://accounts.google.com/o/oauth2/approval?as=-5013c18c497345fc&hl=en&pageId=none&xsrfsign=APsBz4gAAAAAUcwS1TxlojrAPVNCj7ntTlz1H4xQgysC
,而非我发布的内容。
我可以确保我的帖子网址和数据看起来与Google oauthplayground中的完全相同。但结果完全不同。
我做错了什么吗?请帮忙。
答案 0 :(得分:0)
您发送的数据看起来是正确的,但看起来请求的形成方式有两个错误。
首先,当您构建邮件的表单数据部分时,请确保您对所有值进行URL编码,例如如果redirect_uri值包含&,除非是URL编码,否则会导致问题。
其次,当您正确执行POST而不是GET时,您仍然在查询字符串中而不是在请求正文中发送参数。将它们移动到正文,将内容类型设置为'application / x-www-form-urlencoded',然后设置。
(它看起来像JavaScript,但我不确定您使用的是哪些库,因此我没有提供示例代码)