在弹出窗口中登录oauth后,将控制权返回到父窗口

时间:2017-08-09 22:48:46

标签: javascript oauth-2.0 dojo

我已经阅读过window.opener,但它似乎对我没用。

基本思路:打开弹出窗口,让用户登录oauth2系统。(谷歌,盒子等) 我所关心的只是获取网址,因为它具有访问令牌,令牌类型和到期日期。

使用此代码,谷歌网址打开正常,我可以登录(并关闭弹出窗口),但无法将网址传递给其他方法。

按钮上的处理程序点击:

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按预期打印网址,但无论我尝试什么,都无法将相同的“数据”传递给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;
},

有任何帮助提示吗?

1 个答案:

答案 0 :(得分:0)

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