无法在授权期间提取Auth代码

时间:2017-03-12 06:24:07

标签: javascript reactjs authentication oauth

我有以下代码将用户重定向到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和节点以防万一。

1 个答案:

答案 0 :(得分:1)

出于安全原因,如果不是来自同一来源,则无法访问其他浏览器窗口的网址。您将收到以下错误:

  

未捕获DOMException:阻止具有原始“http://yourdomain.com”的帧访问跨源帧。       at yourcode.js(xx:xx)

要理解为什么会出现这个问题,想象一下,您点击恶意网站中的链接,然后该网站就可以操纵新打开的窗口。