firebaseAuth with Angular:用户登录

时间:2014-12-09 21:28:03

标签: javascript angularjs firebase angularfire

我正在使用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。

当我点击提交登录表单时,表单不做任何回复,没有显示任何错误。

登录表单仅在我点击“提交”时才有效。按钮两次 - 这是为什么?混淆

2 个答案:

答案 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