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;
});
}
更新
我应该在哪里实施 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;
});
};
我正在尝试制作一个 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;
});
}
更新
我应该在哪里实施 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;
});
};