我有以下代码将用户重定向到auth url,一旦授权,将返回包含auth代码的回调URL。 (没有弹出窗口,授权在同一个窗口完成)
authStart(e) {
e.preventDefault();
var options = {
client_id: 'some-id',
scopes: ["user:email", "notifications"]
};
var loginUrl = 'https://github.com/login/oauth/authorize?';
var authUrl = loginUrl + 'client_id=' + options.client_id + '&scope=' + options.scopes;
window.open(authUrl, "_parent");
var authCode = this.getAuthCode(window.location.href);
console.log(authCode);
getAuthCode(url){
var error = url.match(/[&\?]error=([^&]+)/);
if (error) {
throw 'Error getting authorization code: ' + error[1];
}
return url.match(/[&\?]code=([\w\/\-]+)/)[1];
},
运行此功能,我可以在窗口中成功获取回调URL,但无法检索身份验证代码。我认为在window.open语句之后立即调用getAuthCode函数,并且因为窗口没有完全加载但是没有任何东西可以检索。应该怎么做才能避免这种情况。我正在使用ReactJS和节点以防万一。
答案 0 :(得分:1)
出于安全原因,如果不是来自同一来源,则无法访问其他浏览器窗口的网址。您将收到以下错误:
未捕获DOMException:阻止具有原始“http://yourdomain.com”的帧访问跨源帧。 at yourcode.js(xx:xx)
要理解为什么会出现这个问题,想象一下,您点击恶意网站中的链接,然后该网站就可以操纵新打开的窗口。