【问题标题】:Angular Firebase $createUser function returns errorAngular Firebase $createUser 函数返回错误
【发布时间】:2014-11-23 19:29:04
【问题描述】:

我在这方面陷入僵局。我正在尝试使用 $firebaseAuth 而不是已弃用的 FirebaseSimpleLogin 创建具有 AngularFire 的用户,如文档中所建议的那样。我确定表单提交了有效的电子邮件和密码,但我继续在控制台中收到以下错误:

Error: Firebase.createUser failed: First argument must contain the key "email" with type "string"

你可以看到代码,我使用工厂服务来处理 $createUser 方法,这是发生错误的地方,因为一旦方法返回,后续的 console.logs 就不会触发。请注意,我也尝试使用文档中的样板代码,而不是在控制器和服务之间拆分它,并且收到了相同的错误。非常感谢您的帮助,谢谢!

ng-submit="register()" 在表单元素上

$scope.register = function(){ console.log($scope.user); // logs object correctly // Authentication is passed into the controller as a dependency Authentication.register($scope.user) .then(function(){ //This does NOT fire console.log("User created successfully!"); Authentication.login($scope.user);
}) .then(function(authData){ console.log("Logged in as:", authData.uid); }) .catch(function(error) { console.log('error'); $scope.errorMessage = error.toString(); }); };

认证工厂服务

var obj = {
    register: function(user){
        var obj = {email: user.email, password: user.password};
        console.log(obj); // works correctly
        //var auth has the reference to Firebase
        return auth.$createUser(obj);
    }   
};

【问题讨论】:

    标签: javascript angularjs firebase angularfire


    【解决方案1】:

    更新:只需升级到 AngularFire 0.9.1 或更高版本即可解决此问题。

    更新详情:从 AngularFire 0.9.1 开始,现在建议使用单个凭据参数(如原始提问者所做的那样)来调用此参数(以及其他身份验证方法)。下面描述的格式已被弃用,将在即将发布的版本中删除,因此我们不建议使用它。

    这是我在编写文档时的错。对于完全可以理解的混乱,我深表歉意。我想让 API 在某种程度上向后兼容以前的 AngularFire API,并决定让用户管理方法采用单独的参数,而不是像常规 Firebase SDK 采用的参数对象。但是,文档(和示例)并未准确反映这一决定。您的代码应如下所示:

    auth.$createUser("test@test.com", "password").then(function() {
      console.log("User created successfully!");
    }).catch(function(error) {
      console.log("Error:", error);
    });
    

    我会立即更新文档,但这里是让您畅通无阻的答案。

    【讨论】:

    • 那行得通,是的,文档看起来你必须传递一个对象,特别是因为 $authWithPassword 需要一个对象进行登录。谢谢,Firebase 简直太棒了!
    • 文档将在明天(星期一)第一时间修复。如果您发现任何其他文档问题,请告诉我们。我们试图使它们尽可能准确,但它们会不断得到改进。将来我们可能会支持将所有参数作为对象传递的能力,但我需要与我的同事讨论这一点。
    • @qmmr- 我所指的文档是正确的:firebase.com/docs/web/libraries/angular/…。如果您认为在某处发现了问题,请提供链接。
    • 这实际上是今天 0.9.1 版本的正确语法。 :) 两者都可以,但现在不推荐使用单个参数版本。因为 Firebase 客户端不这样做,所以对我来说做单个参数是一个错误。
    【解决方案2】:

    我得到同样的错误。 Angularfire 1.1 或更高版本(在家编写代码)(使用 Bower 更新)。我正在关注教程https://www.firebase.com/docs/web/libraries/angular/guide/user-auth.html 并使用管理用户的代码。

    该代码适用于硬编码字符串,例如。用户@domain.com。我还找到了解决方法。如果我将 + '' 添加到 $Auth.createUser() 的对象的参数中。我也工作。我觉得我发布的电子邮件/密码文本作为 ng-model 不是字符串?

    【讨论】:

      猜你喜欢
      • 2015-01-02
      • 2019-01-12
      • 2019-08-21
      • 2019-05-21
      • 1970-01-01
      • 2019-09-03
      • 2021-03-04
      • 2014-12-16
      相关资源
      最近更新 更多