我正在使用Angular(1.3.5)和Firebase编写玩具博客程序,目前我正在努力使用用户登录部分。
我首先创建了一个Angular模块:
var blogApp = angular.module('blogApp', ['ngRoute', 'firebase', 'RegistrationController']);
然后在blogApp上,我创建了一个名为** RegistrationController **的控制器:
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()
范围内的用户登录表单中将RegistratinController
方法附加到ng-submit。
当我点击提交登录表单时,表单不做任何回复,没有显示任何错误。
登录表单仅在我点击“提交”时才有效。按钮两次 - 这是为什么?混淆
答案 0 :(得分:4)
您正在使用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库的Angular绑定,用于处理对象和数组的自动同步。 AngularFire还会处理何时调用$scope.apply
以正确更新视图。
在您的情况下,登录代码正在首次点击,但它不会应用于页面。您可以将此代码包装在$timeout
中,但最好使用$firebaseAuth
服务。
答案 1 :(得分:1)
感谢用户 jacobawenger ,对于他在此发布的解决方案:
Can't get new password authentication methods to work in AngularFire 0.9.0?
这可以按预期工作:
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