2017-03-12 16 views
2

認証コードを含むコールバックURLが返される認証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を取得することができるが、認証コードを取得することができません。私が考えているのは、getAuthCode関数はwindow.open文の直後に呼び出され、ウィンドウが完全にロードされていないために取得するものがないからです。これを避けるために何をすべきか。 ReactJSとノードを使用しています。

答えて

1

セキュリティ上の理由から、別のブラウザウィンドウのURLが同じ起源でない場合は、そのURLにアクセスできません。

Uncaught DOMException: Blocked a frame with origin " http://yourdomain.com " from accessing a cross-origin frame. at yourcode.js(xx:xx)

は、これが問題になる理由を理解あなたが悪質なWebサイトにリンクをクリックすると、そのウェブサイトが新しく開いたウィンドウを操作することができるだろうと想像する:あなたは、次のようなエラーになるだろう。

+0

これを避けるために私は何をすべきですか?私はちょっと混乱しています。 –

+0

@AronKarmer githubはユーザをデフォルトで同じページにリダイレクトするので、ウィンドウが読み込まれるときに 'code'パラメータのチェックを追加する必要があります。存在する場合は、ユーザーを認証できます。 –

関連する問題