asi*_*elf 2 angularjs firebase
一直在玩firebase和angularjs,只是想把一些小东西放在一起.我现在在控制器中使用auth工作,在登录按钮上调用此函数点击:
$scope.signin = function(){
var user1 = $scope.cred.user;
var pass1 = $scope.cred.password;
var ref = new Firebase("https://kingpinapp.firebaseio.com");
var auth = new FirebaseAuthClient(ref, function(error, user) {
if (user) {
// user authenticated with Firebase
console.log(user);
} else if (error) {
// an error occurred authenticating the user
console.log(error);
} else {
// user is logged out
}
});
auth.login('password', {
email: user1,
password: pass1,
rememberMe: false
});
console.log("tracer");
}
Run Code Online (Sandbox Code Playgroud)
现在这很好,工作正常.但它似乎以异步方式工作,例如我的console.log("tracer")在auth.login的用户对象之前返回.我知道我可能需要使用promises来完成这项工作并尝试执行以下操作:
var defer = $q.defer();
defer.auth
.then(function() {
auth.login('password', {
email: user1,
password: pass1,
rememberMe: false
});
})
.then(function() {
console.log("tracer");
})
Run Code Online (Sandbox Code Playgroud)
但是我在控制器模块中声明它后没有定义$ q.所以我要做的是
我想把auth.login函数放在变量auth的else中但是看起来不会起作用.只是试图找出理解如何使其工作的正确逻辑.
您不希望每个控制器都有FirebaseAuthClient,但您确实希望在用户的身份验证状态发生更改时提醒所有控制器.
FirebaseAuthClient 将为您处理会话存储.用户成功登录后,您只需隐藏登录屏幕/按钮即可.
尝试这样的事情:
.service('myAuthService', ["$rootScope", function($rootScope) {
var ref = new Firebase("https://kingpinapp.firebaseio.com");
this.auth = new FirebaseAuthClient(ref, function(error, user) {
if (user) {
$rootScope.$emit("login", user);
}
else if (error) {
$rootScope.$emit("loginError", error);
}
else {
$rootScope.$emit("logout");
}
});
}])
Run Code Online (Sandbox Code Playgroud)
.controller('myCtrl', ["$scope", "$rootScope", "myAuthService", function($scope, $rootScope, myAuthService) {
$scope.signin = function() {
var user1 = $scope.cred.user;
var pass1 = $scope.cred.password;
myAuthService.auth.login('password', {
email: user1,
password: pass1,
rememberMe: false
});
}
// listen for user auth events
$rootScope.$on("login", function(event, user) {
// do login things
$scope.user = user;
})
$rootScope.$on("loginError", function(event, error) {
// tell the user about the error
})
$rootScope.$on("logout", function(event) {
// do logout things
})
}])
Run Code Online (Sandbox Code Playgroud)
<button ng-show="user" ng-click="signin()">Sign in</button>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4732 次 |
| 最近记录: |