Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript firebaseAuth与Angular:用户登录_Javascript_Angularjs_Firebase_Angularfire - Fatal编程技术网

Javascript firebaseAuth与Angular:用户登录

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

我正在使用Angular(1.3.5)和Firebase编写一个玩具博客程序,目前正在努力解决用户登录部分的问题

我首先创建了一个角度模块:

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数据已更新并触发编译。如果您仍有问题,请使用新代码更新您的问题,或接受其他遇到类似问题的人的答案。您是否设法解决了此问题?我有完全相同的问题。下面提供的答案不适用于我,请让我知道我的答案是否适用于您。如果是,请将其标记为已接受。让无人应答的队列保持畅通是件好事。