我正在尝试使用Google Api客户端代码撤销令牌。
我的代码看起来像这样:
$.get("https://accounts.google.com/o/oauth2/revoke?token=" + accessToken, function () {
window.location.reload();
});
我收到以下错误?
XMLHttpRequest 无法加载 https://accounts.google.com/o/oauth2/revoke?token=tokenishere 起源 访问控制允许源不允许 http://balblabla.com。
经过一些研究,我发现您可以通过在jquery ajax请求中指定dataType:"jsonp"选项来绕过cors限制。 相关信息在这里:https://developers.google.com/+/web/signin/disconnect
$.ajax({
type: 'GET',
url: revokeUrl,
async: false,
contentType: "application/json",
dataType: 'jsonp',
success: function(nullResponse) {
// Do something now that user is disconnected
// The response is always undefined.
},
error: function(e) {
// Handle the error
// console.log(e);
// You could point users to manually disconnect if unsuccessful
// https://plus.google.com/apps
}
});
接@krg的评论:
根据错误,您似乎无法在此客户端上执行此操作。也许您需要一个服务器端脚本来处理来自域中的请求。您还可以探索此解决方案。下面是使用该解决方案的 jsFiddle 示例。
我已经在服务器端使用相同的代码完成了此操作:
$.ajax({ url:"https://accounts.google.com/o/oauth2/revoke?token=10100101", dataType: 'jsonp', // Notice! JSONP <-- P (lowercase) success:function(json){ console.log(arguments); // do stuff with json (in this case an array) alert("Success"); }, error:function(){ alert("Error"); }, });
哪个有效。
现在 jsonp 不起作用。他们将内容类型更改为"application/x-www-form-urlencoded",
$.ajax({
type: 'GET',
url: "https://accounts.google.com/o/oauth2/revoke?token=dsfgdfsg.98sdfgsdfg9sd8fgsdfgs.sdfg89dsfg",
async: false,
contentType: "application/x-www-form-urlencoded",
success: function(nullResponse) {
// Do something now that user is disconnected
// The response is always undefined.
},
error: function(e) {
console.log(e)
}
});