Javascript firebaseAuth与Angular:用户登录
我正在使用Angular(1.3.5)和Firebase编写一个玩具博客程序,目前正在努力解决用户登录部分的问题 我首先创建了一个角度模块:Javascript firebaseAuth与Angular:用户登录,javascript,angularjs,firebase,angularfire,Javascript,Angularjs,Firebase,Angularfire,我正在使用Angular(1.3.5)和Firebase编写一个玩具博客程序,目前正在努力解决用户登录部分的问题 我首先创建了一个角度模块: var blogApp = angular.module('blogApp', ['ngRoute', 'firebase', 'RegistrationController']); 然后在blogApp之上,我创建了一个名为**注册控制器**的控制器: blogApp.controller('RegistrationController', funct
var blogApp = angular.module('blogApp', ['ngRoute', 'firebase', 'RegistrationController']);
然后在blogApp之上,我创建了一个名为**注册控制器**的控制器:
blogApp.controller('RegistrationController', function ($scope, $firebaseAuth, $location) {
var ref = new Firebase('https://myAppName.firebaseio.com');
// var authLogin = $firebaseAuth(ref);
$scope.login = function(){
ref.authWithPassword({
email: $scope.user.email,
password: $scope.user.password
}, function(err, authData) {
if (err) {
$scope.message = 'login error';
} else {
$scope.message = 'login sucessful!';
}
});
}; // login
}); //RegistrationController
我将login()
方法附加在registrationInControl
范围内的我的用户登录表单中提交
当我点击提交登录表单时,表单不会做出任何响应,不会显示任何错误
只有当我点击“提交”按钮两次时,登录表单才会工作-为什么?令人困惑的是,您使用的是Firebase JavaScript库,而不是AngularFire作为登录方法 您需要将Firebase引用传递到
$firebaseAuth
绑定中
var auth = $firebaseAuth(ref);
从那里,您可以调用auth.$authWithPassword
$scope.login = function(){
auth.$authWithPassword({
email: $scope.user.email,
password: $scope.user.password
}, function(err, authData) {
if (err) {
$scope.message = 'login error';
} else {
$scope.message = 'login successful!';
}
});
}; // login
AngularFire是Firebase库的角度绑定,用于处理对象和数组上的自动同步。AngularFire还处理何时调用$scope.apply
以正确更新视图
在您的情况下,登录代码在第一次单击时就起作用,但它不会应用于页面。您可以将此代码包装为
$timeout
,但最好使用$firebaseAuth
服务。感谢用户jacobawenger,他在此处发布了解决方案:
这与预期的效果一样:
myApp.controller('RegistrationController',
function($scope, $firebaseAuth, $location) {
var ref = new Firebase('https://myApp.firebaseio.com');
var simpleLogin = $firebaseAuth(ref);
$scope.login = function() {
simpleLogin.$authWithPassword({
email: $scope.user.email,
password: $scope.user.password
}).then(function() {
$location.path('/mypage');
}, function(err) {
$scope.message = err.toString();
});
} // login
}); // RegistrationController
你犯了什么错误?你能在Plunker中复制这个吗?根据你给我的密码,答案是准确的。@TonyGW David在这里的答案是正确的。您需要告诉Angular数据已更新并触发编译。如果您仍有问题,请使用新代码更新您的问题,或接受其他遇到类似问题的人的答案。您是否设法解决了此问题?我有完全相同的问题。下面提供的答案不适用于我,请让我知道我的答案是否适用于您。如果是,请将其标记为已接受。让无人应答的队列保持畅通是件好事。