我正在尝试在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
方法。我无法让它发挥作用。
任何帮助都将不胜感激。
答案 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;
});
};
});