firebase - 使用 $set() 将 User 对象添加到 Firebase 中的/users

标签 firebase angularfire

我目前正在尝试通过 AngularFire $set() 方法将新用户添加到 Firebase。我正在通过 AngularFire 的 $createUser 方法创建新用户。我的代码如下所示:

$scope.createUser = function() {
      $scope.auth.$createUser('<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="dabeb5b6b6a39abdb7bbb3b6f4b9b5b7" rel="noreferrer noopener nofollow">[email protected]</a>', 'password').then(function(user, err) {
        if (err) {
          console.log('ERROR: ' + err);
        } else {
          sync.$set('users', user);
        }
      });
}

这是一个创建新用户并将新用户对象放置在 users:{..} 内部的过程,但是,它还添加了一个额外的用户子对象,该对象只是重复的数据 - 这就是代码添加到 Firebase 的内容:

{
"users": {
    "email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="32565d5e5e4b72555f535b5e1c515d5f" rel="noreferrer noopener nofollow">[email protected]</a>",
    "id": "11",
    "isTemporaryPassword": false,
    "md5_hash": "xxxxxxxxxxxxxxx",
    "provider": "password",
    "sessionKey": "xxxxxxxxxxxxx",
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0MDc5NDQ2NDYsInYiOjAsImQiOnsicHJvdmlkZXIiOiJwYXNzd29yZCIsImlkIjoiMTEiLCJ1aWQiOiJzaW1wbGVsb2dpbjoxMSIsImVtYWlsIjoiZG9sbHlAZ21haWwuY29tIiwibWQ1X2hhc2giOiIzsdrggfeedsaadrfcDc0ZDRhMTU5NTk2NzI1NzFmMDk2ZTZlNyIsImlzVGVtcG9yYXJ5UGFzc3dvcmQiOmZhbHNlLCJzZXNzaW9uS2V5IjoiM2MwMDNjODkxMDEzOWE5MjhlZTZjNWI1NjU5ZTRiZjMifSwiaWF0IjoxNDA3ODU4MjQ2fQ.p7-9GDtaNpBn1ICTLIUSwlPytaUGi-jyBgcO-LKHUys",
    "uid": "simplelogin:11",
    "user": {
    "email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="88ece7e4e4f1c8efe5e9e1e4a6ebe7e5" rel="noreferrer noopener nofollow">[email protected]</a>",
    "id": "11",
    "isTemporaryPassword": false,
    "md5_hash": "xxxxxxxxxxxxxxx",
    "provider": "dfrggrssxxxxxxx",
    "sessionKey": "xxxxxxxxxxxxxxx",
    "uid": "simplelogin:11"
    }
}

理想情况下,我希望我的用户对象看起来像 firebase 中的示例,除了每个用户 key 是 user.uid 内的任何内容

users: {
    user1: {
      name: "Alice"
    },
    user2: {
      name: "Bob"
    }
}

每个新用户将在哪里添加到 users: {...} 键而不附加重复的用户子项?

最佳答案

如果您创建对 users/ 的引用,然后在该路径上调用 $set,那么您包含的任何数据都将替换该路径上的任何内容。这是AngularFire 101 。如果不是整个指南,您应该至少阅读该部分。

在创建同步对象时选择要设置数据的路径。

var ref = new Firebase('.../users/'+user.uid);
var sync = $firebase(ref);
sync.$set({ email: user.email, provider: user.provider });

或者,更好的是,只需将其设置在引用上,因为您没有将其用于客户端绑定(bind)。

var ref = new Firebase('.../users/'+user.uid);
ref.set({ email: user.email, provider: user.provider });

Firebase docs 中解释了如何创建配置文件并在 AngularFire-Seed 存储库的 createProfile service 中进行了介绍,几乎逐字逐句地描述您的示例。

关于firebase - 使用 $set() 将 User 对象添加到 Firebase 中的/users,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25269134/

相关文章:

javascript - 在 valueChanges 订阅中捕获 Firestore 错误并在失败时重试

node.js - 使用 Angular 和 Firebase 获取 uid 并迭代对象数组

javascript - AngularFire2实时数据库按日期值排序

javascript - 如何使用 firebase 和 angularfire 计算数组中对象的总值?

javascript - angularfire 无法读取属性 facebook - 我如何在整个应用程序中继续使用 authData

javascript - FireBase - AngularFire 将对象键设置为变量

android - java.lang.IllegalArgumentException : Must specify an idToken or an accessToken

swift - 如何从 Firebase 数据库而不是 Swift 中的存储下载视频 URLString

ios - 来自相机/相机胶卷的图像仅上传到 Firebase 一次

firebase - 设置较长时间的计时器 || React Native 和 Firebase 问题