列出了Firebase重定向域,但仍然使用signInWithRedirect发出错误

时间:2017-03-23 18:30:41

标签: angular firebase firebase-authentication google-authentication

我有一个使用firebase进行身份验证的角度2应用程序。 我想使用Google作为我的authenticatonprovider,并将所有内容设置为可以正常工作。

如果我尝试使用signinWithPopup进行身份验证(如文档中所述),则可以正常运行:

firebase.auth().signInWithPopup(provider).then(function(result) {
  // This gives you a Google Access Token. You can use it to access the Google API.
  var token = result.credential.accessToken;
  // The signed-in user info.
  var user = result.user;
  // ...
}).catch(function(error) {
  // Handle Errors here.
});

但是,如果我使用重定向firebase.auth().signInWithRedirect(provider)尝试相同的代码 我收到错误:

  

[firebase-auth]信息:当前域未获得OAuth授权   操作。这将阻止signInWithPopup,signInWithRedirect,   linkWithPopup和linkWithRedirect来自工作。添加您的域名   (localhost)到Firebase控制台中的OAuth重定向域列表    - >验证部分 - >登录方法标签。

但是该部分在我的firebase控制台中列在该部分中(localhost甚至是默认允许的域之一)。 并且错误表明这也会阻止signinwithpopup仍然有效。

任何人都知道为什么弹出窗口方法可以正常工作而且重定向的方法不起作用?

1 个答案:

答案 0 :(得分:2)

所以我终于弄明白了问题所在。 问题不是基于域的,它是应用程序流程中的问题。 login.popup代码是在app.component.ts的构造函数中调用的(目的是在加载站点后立即记录人员)。

我将该代码更改为loginwithredirect函数,但由于它是在构造函数中调用的,因此每次从google身份验证页面重定向回到该站点时都会调用它(这将使您处于永久循环中)。 我仍然不知道为什么域错误在浏览器控制台中出现,但是当我修复流程以首先检查我们是否从重定向回来时问题就消失了。

为了完整性,我使用重定向方法登录的当前代码:

firebase.auth().getRedirectResult().then(function (result) {
  if (result.credential) {
    // This gives you a Google Access Token. You can use it to access the Google API.
    var token = result.credential.accessToken;
    // The signed-in user info.
    var user = result.user;
  } 
  else {
    var provider = new firebase.auth.GoogleAuthProvider();

    provider.addScope('https://www.googleapis.com/auth/gmail.readonly');
    provider.addScope('https://www.googleapis.com/auth/calendar');
    provider.addScope('https://www.googleapis.com/auth/drive');
    provider.addScope('https://www.googleapis.com/auth/drive.appdata');
    provider.addScope('https://www.googleapis.com/auth/drive.file');

    firebase.auth().signInWithRedirect(provider);

   }
}).catch(function (error) {
  // Handle Errors here.
  console.log(error);
});