我正在使用Cordova的inappbrowser并整合Google oauth2.0。获得授权代码后,我发出了一个发布请求以获取我的令牌。无论我尝试什么,我总是得到400错误“必需参数缺少grant_type”。我正在编码uri,我正在设置正确的标题,但无济于事......任何人都可以帮忙吗?
$http({
method: 'POST',
url: 'https://accounts.google.com/o/oauth2/token',
params:{code:authorization_code[0],
client_id:options.client_id,
client_secret:options.client_secret,
redirect_uri:options.redirect_uri,
grant_type:'authorization_code'},
headers:{
'Content-Type':'application/x-www-form-urlencoded',
}
}).success(function(data,status,headers,config){
deferred.resolve(data);
}).error(function(data, status,headers,config){
console.log('data, status, headers,config',data,status,headers,config);
deferred.reject(response.responseJSON);
});
这是我尝试发出请求时Chrome dev控制台的输出
请求方法:POST
状态代码:400错误请求
请求标题
接受: application / json,text / plain, /
原产地:file://
测试:测试
User-Agent:Mozilla / 5.0(Linux; Android 4.4.2; SCH-I535 Build / KOT49H)AppleWebKit / 537.36(KHTML,类似Gecko)版本/ 4.0 Chrome / 30.0.0.0 Mobile Safari / 537.36
查询字符串参数 CLIENT_ID = xxx-oh7o4cmaju3jgprllln97nf0p3pc1f91.apps.googleusercontent.com&安培; client_secret = XXX&安培;代码= 4%2FnITDK731NhavPePthrVA1eX8LHFC.ojUX9K7DpBYaEnp6UAPFm0HWDS5njgI&安培; grant_type = authorization_code&安培; REDIRECT_URI = HTTP:%2F%2Flocalhost
响应标头 HTTP / 1.1 400错误请求 Pragma:没有缓存 日期:星期一,2014年7月14日06:35:22 GMT 内容编码:gzip X-Content-Type-Options:nosniff 服务器:GSE X-Frame-Options:SAMEORIGIN Content-Type:application / json Cache-Control:no-cache,no-store,max-age = 0,must-revalidate 转移编码:分块 替代协议:443:quic X-XSS-Protection:1;模式=块 到期日:1990年1月1日星期五00:00:00 GMT
答案 0 :(得分:1)
错误的帖子请求。 params
属性用于设置要附加到URL查询字符串的任何其他请求参数。 params
属性是一个JavaScript对象,每个请求参数都有一个属性要添加。
答案 1 :(得分:0)
您只需要序列化发送数据/参数(angular
使用$httpParamSerializer
)
$http({
method: 'POST',
url: 'https://accounts.google.com/o/oauth2/token',
params:$httpParamSerializer({code:authorization_code[0],
client_id:options.client_id,
client_secret:options.client_secret,
redirect_uri:options.redirect_uri,
grant_type:'authorization_code'}),
headers:{
'Content-Type':'application/x-www-form-urlencoded',
}
}).success(function(data,status,headers,config){
deferred.resolve(data);
}).error(function(data, status,headers,config){
console.log('data, status, headers,config',data,status,headers,config);
deferred.reject(response.responseJSON);
});