javascript - 无法将新用户保留到 Firebase 数据库

标签 javascript angularjs firebase firebase-realtime-database angularfire

我已经阅读了无数教程,但我根本无法让任何数据出现在 Firebase 数据库中。我正在尝试获得这个结构

"my-app-name": {
    "users": {
        "uid-of-user": {
            "email": "them@them.com",
            "todoitems": {
            }
        }
    }
}

首先我不知道如何获取该结构。在可视化编辑器的 "my-app-name" 下,我放置了 "users"= ""。我不确定这是否是将 users 建立为空对象的方法。或者也许我根本不应该使用可视化编辑器?这是我的 createNewUser Controller ,它应该将新用户保存到数据库中:

function LoginController($scope, Auth, $state, $location, $firebaseObject, $firebase) {
    $scope.createNewUser = createNewUser;
    $scope.signupComplete = "";

    function createNewUser() {
        var ref = new Firebase("https://sizzling-torch-655.firebaseio.com/");

        //CREATE USER
        Auth.$createUser({
            email: $scope.email,
            password: $scope.password
        }).then(function(userData) {

            //THIS SHOULD BE PERSISTING IT TO THE DATABASE
            var user = $firebaseObject(ref.child('users').child(userData.uid));
            user.$loaded().then(function() {
                var newUser = {
                    emailAddress: $scope.email,
                };
                user.$ref.$set(newUser);
            })
            // $location.path("/home");
        }).catch(function(error) {
            $scope.responseMessage = error;
        });
    };
};

应该注意的是,我还没有在 firebase 数据库中创建用户对象。非常感谢任何帮助。非常感谢。

澄清

Auth.$creatUser 是:

app.factory("Auth", ["$firebaseAuth", function($firebaseAuth) {
    return $firebaseAuth(ref);
}]);

我已成功创建用户,并看到它们显示在 Firebase 信息中心的“登录/用户”选项卡中。但我无法将它们存储到数据库中。

userData.uid 是从 $createUserthen 部分返回的 userData 对象功能。

编辑2 这些是我的安全和规则。这会影响我将用户数据写入数据库吗? 这将是一个待办事项应用程序。用户应该只能访问自己的数据。

{
  "rules": {
    // public read access
    ".read": true,

    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

最佳答案

Firebase 身份验证不会自动将用户信息存储在数据库中。如果您想将此类信息存储在数据库中,您必须自己编写必要的代码。

来自您的代码片段:

//THIS SHOULD BE PERSISTING IT TO THE DATABASE
var user = $firebaseObject(ref.child('users').child(userData.uid));

此代码也在数据库中存储任何信息。相反,它尝试从数据库读取用户的数据。但由于您一开始就没有将其写入此处,因此读取将不会完成任何操作,并且 then() 将永远不会执行。

解决方案是在用户进行身份验证时将必要的用户数据写入数据库。

var user = $firebaseObject(ref.child('users').child(userData.uid));
var newUser = {
    emailAddress: $scope.email,
};
user.$ref.$set(newUser);

关于javascript - 无法将新用户保留到 Firebase 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32609459/

相关文章:

javascript - NodeJS 提交时无响应

javascript - 如何导出 JSON 文件中的对象数组,然后使用 es6 导入

javascript - 如何在 Chrome 上以高分辨率绘制 Canvas ?为什么如果 devicePixelRatio === webkitBackingStorePixelRatio 缩放到 2 倍会提高分辨率?

javascript - d3.partition 冰柱图的层次结构级别标签

ruby-on-rails - 在 Rails 中使用 AngularJS 检索嵌套资源

android - 火力地堡不工作。安卓

javascript - Ng-Repeat 不重复(或返回任何内容)

javascript - 使用 ngOptions 和 selectpickerintable 重置下拉菜单默认值

ios - 从 Firebase 数据库中获取特定字段

Angular 8 Firebase 获取 node_modules/firebase/index.d.ts(4369, 38) : error TS1005: ';' expected