2017-08-09 10 views
0

私はwindow.openerについて読んだことがありますが、それは私にとってはうまくいかないようです。ポップアップでoauthログイン後に親ウィンドウに制御を戻す

基本的な考え方:oauth2システムにサインインするポップアップ(Google、ボックスなど) アクセストークン、トークンタイプ、有効期限があるため、そこから気になるのはURLを取得していることです。

このコードでは、Google URLが正常に開き、ログインできます(またポップアップも閉じることができます)が、他の方法にURLを渡すことはできません。ボタンのクリックで

ハンドラ:

var url = "https://accounts.google.com/o/oauth2/v2/auth?scope="+ scope + 
"&redirect_uri="+ redirect_uri + 
"&response_type=token&client_id=" + client_id; 

this.oauthSignIn(url, redirect_uri).then(
lang.hitch(this, function (data) { 
    console.log("here 0 " + data); 
    this._getTokenValue(data, 'access_token').then(function (data1) { 
    console.log("here 2 " + data1); 
    }); 
}), 
); 

CONSOLE.LOGが期待通りのURLを出力しますが、同じ「データ」は関係なく、私がしようとするものthis_getTokenValueに渡されていないことはできません。

this.oauthSigin:

oauthSignIn: function(url, redirect_uri) { 
var dfd = new Deferred(); 
var win = window.open(url, "_blank", 'width=800, height=600'); 
var pollTimer = window.setInterval(function() { 
    try { 
    if (win.document.URL.indexOf(redirect_uri) != -1) { 
    window.clearInterval(pollTimer); 
    win.close(); 
    dfd.resolve(win.document.URL); 
    } 
    } catch(e) { 
} 
},100); 
return dfd; 
} 

私はこれにこの機能をURLを渡すことができるように見えることはありませんすることはできません。

_getTokenValue: function(url, name) { 
    var dfd = new Deferred(); 
    name = name.replace(/[[]/,"\[").replace(/[]]/,"\]"); 
    var regexS = "[\?&]"+name+"=([^&#]*)"; 
    var regex = new RegExp(regexS); 
    var results = regex.exec(url); 
    if(results == null) 
     dfd.resolve(""); 
    else 
     dfd.resolve(results[1]); 

    console.log("here1 " + results); 
    return dfd; 
}, 

ヘルプポインターはありますか?

答えて

0

は動作しませんでした

if (win.document.URL.indexOf(redirect_uri) != -1) { 
    window.clearInterval(pollTimer); 
    var d = win.document.URL; 
    win.close(); 
    dfd.resolve(d); 
} 
+0

を試してみてください:( – Dhrumil

関連する問題