无法在AngularFire 0.9.0中使用新的密码验证方法吗?

时间:2014-11-23 01:58:18

标签: angularjs angularfire

我正在尝试在Angular Fire 0.9.0中使用新的身份验证方法,但我一定做错了。

我正在运行1.3.2的Angular,2.0.4的Firebase和0.9.0的Angular Fire。

我从我的html中的ng-click调用登录函数。

这是我的js:

var app = angular.module("sampleApp", ["firebase"]);

app.controller('mainCtrl', function ($scope, $firebaseAuth) {

var ref = new Firebase('https://XXXX.xxx');

$scope.auth = $firebaseAuth(ref);

$scope.login = function() {
    $scope.num = 'loggin in';
    $scope.auth.$authWithPassword({
        email: 'xxx@xxx.xxx',
        password: 'yyyyy'
    }, function(err, authData) {
        if (err) {
            console.log(err);
            $scope.num = err;
        } else {
            console.log(authData);
        }
    });
};

我在控制台中看不到任何内容,也没有任何错误。所以我无法弄清楚如何调试我做错了什么。

当我将$scope.auth记录到控制台时,会显示$authWithPassword方法。我无法让它发挥作用。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:5)

您遇到的问题是AngularFire API与用于身份验证方法的常规Firebase API略有不同。虽然Firebase SDK将回调作为authWithPassword()的第二个参数,但AngularFire API会返回$ authWithPassword()的承诺。差异的原因是承诺是Angular中非常常见的习惯用语,我们希望提供人们已经熟悉的API。所以,你的代码应该是这样的:

var app = angular.module("sampleApp", ["firebase"]);

app.controller('mainCtrl', function ($scope, $firebaseAuth) {
  var ref = new Firebase('https://XXXX.xxx');

  $scope.auth = $firebaseAuth(ref);

  $scope.login = function() {
    $scope.num = 'logging in';
    $scope.auth.$authWithPassword({
      email: 'xxx@xxx.xxx',
      password: 'yyyyy'
    }).then(function(authData) {
      console.log(authData);
    }).catch(function(error) {
      console.log(err);
      $scope.num = err;
    });
  };
});