Angular 中的 Firebase 身份验证服务 -- 数据并非对所有控制器可用

Firebase Auth Service in Angular -- data not available to all the controllers

我正在尝试制作一个 Angular (1.6) 服务来处理所有使用 Firebase 的身份验证。

我打算做什么?

我想在我的导航栏(navbar.html 第 23 行)中有一个按钮,它打开一个模态(loginRegister.tpl.html)并且在该模态中有所有不同的方式来验证应用程序(我想从 facebook 开始)。一旦它从 Facebook 获得了用户信息(Auth.js 第 21 行),我想使用 Auth 服务使所有控制器都可以使用该信息,但似乎在我将信息分配给服务后 属性,它不会反映在服务的 属性 被引用的其他地方(main.js 第 14 行)

即使我以用户信息作为参数(loginRegister.tpl.js 第 6 行)关闭模态,我也无法将其分配给 navbar.js 第 20 行的服务 属性。

你能帮我解决这个问题吗?

    Auth.facebookSignIn = function(){
        return authObj.$signInWithPopup("facebook")
        .then(function(data){
            Auth.user = data.user;
        })
        .catch(function(error){
            var errorCode = error.code;
            var errorMessage = error.message;
            var email = error.email;
            var credential = error.credential;
            return error;
        });
    }

plnkr

更新

我应该在哪里实施 if(!Auth.userPromise){ ?因为我尝试将它添加到 loginRegister.tpl.js 中,但它实际上没有在服务中看到 userPromise 属性。

loginRegister.tpl.js

$ctrl.loginFacebook = function () {
    if(!Auth.userPromise) { 
        console.log("No Auth promise"); 
    } else { 
        Auth.userPromise.then(function(user){
            console.log(user);
    });
 } 

更新#2

我试过了,但它不起作用,我的意思是...它可以安慰用户,但我已经可以做到了。我的问题是,例如,我在 navbar.js(第 6 行)"Auth.user" 中引用,但它不理解我所做的,我无法更新引用并使其出现在 [=17= 中] (第 21 行)我想指出的是,我无法找到一种方法,一旦用户登录,它就会在注入 Auth 服务的任何地方自动反映出来。我的问题更清楚了吗?

我认为你可以做的是在使用 Auth 服务(facebook 登录)后使用 loginRegister.js 中的结果,然后 getUser 和 setUser 将它放在一个新的服务中,如 userService 并在那里设置数据认证成功后。现在您可以在任何地方使用 userService(带有用户数据)。

loginRegister.js

$ctrl.loginFacebook = function () {
       Auth.facebookSignIn()
        .then(function(data){
           userService.setUser(data.user); //set user
          console.log(userService.getUser()); //check if it was set properly.
          })
        .catch(function(error){
            var errorCode = error.code;
            var errorMessage = error.message;
            var email = error.email;
            var credential = error.credential;
        });
    };

plunkr