Firebase - 保存数据

时间:2017-09-12 02:41:06

标签: firebase react-native firebase-realtime-database firebase-authentication

我对火焰基地有疑问。

我正在开发一个有三个屏幕的应用:“注册屏幕”,用户将使用电子邮件和密码创建一个帐户。 “构建个人资料屏幕”,用户将回答在其个人资料中要实施的一些问题(例如“您的名字是什么?”)。最后是“个人资料屏幕”,其中将显示用户信息,例如用户名。

在'注册屏幕'我没有问题,用户填写电子邮件输入和密码输入,点击“创建帐户”,调用.createUserWithEmailAndPassword,用户帐户是创建并将其带到“建筑个人资料屏幕”。我遇到的问题是在“构建个人资料屏幕”中。我的问题是:如何保存用户名和其他数据? 我读了一些关于这个主题的文章,但我很难理解。你们中的任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:0)

您希望在firebase中为每个用户创建一个节点或多个节点,以保存其特定于用户的信息。数据库结构可以是统一的,如下所示:

users: {
  uid_a: {
    username: 'uid_as_username',
    email: 'uid_as_email',
    name: 'uid_as_name',
    other_attribute: 'uid_as_other_attribute_value'
    [,...]
  },
  uid_b: {
    username: 'uid_bs_username',
    email: 'uid_bs_email',
    name: 'uid_bs_name',
    other_attribute: 'uid_bs_other_attribute_value'
    [,...]
  }
  [,...]
}

或像这样分开:

usernames: {
  uid_a: 'uid_as_username',
  uid_b: 'uid_bs_username'
  [,...]
},
emails: {
  uid_a: 'uid_as_email',
  uid_b: 'uid_bs_email'
  [,...]
},
names: {
  uid_a: 'uid_as_name',
  uid_b: 'uid_bs_name'
  [,...]
},
other_attribute: {
  uid_a: 'uid_as_other_attribute_value',
  uid_b: 'uid_bs_other_attribute_value'
  [,...]
}

您选择的是设计选择,但这就是想法。

答案 1 :(得分:0)

只需补充@Vincent答案,默认情况下,您可以在firebase auth中存储用户名,电子邮件和photoUrl(阅读获取用户个人资料:https://firebase.google.com/docs/auth/web/manage-users)。

如果您需要存储更多信息,例如邮政地址,电话号码等,您可以在数据库中创建一个节点,如users,并存储您需要的所有数据。您甚至可以使用为auth创建的相同UID作为数据库的ID。通过这种方式,您将来可以更轻松地获得用户信息。

当您使用电子邮件和密码创建用户时,您可以返回user并使用此类脚本将其添加到您的数据库

firebase.database.ref(`Users/${user.uid}`).set({
name: this.state.name,
email: this.state.email,
});

以上面的代码为例。

更喜欢使用.set()代替.push()。如果您使用.push() firebase将创建一个您无法更改的随机ID。使用.set(),您可以确定节点的值。

希望它有所帮助。

答案 2 :(得分:0)

这取自官方文档,可能会让您了解如何从数据库更新和获取数据。

  

设置适用于Android的Firebase实时数据库

     

将您的应用连接到Firebase

     

安装Firebase SDK。在Firebase控制台中,将您的应用添加到   您的Firebase项目。将实时数据库添加到您的应用程序

     

将Firebase实时数据库的依赖关系添加到您的应用级别   build.gradle文件:

compile 'com.google.firebase:firebase-database:11.2.2'
     

配置Firebase数据库规则

     

Realtime Database提供了一种声明性规则语言   允许您定义数据的结构,应该如何构建   被索引,以及何时可以读取和写入您的数据。通过   默认情况下,对数据库的读写访问权限仅受限制   经过身份验证的用户可以读取或写入数据没有开始   设置身份验证,您可以配置公共规则   访问。这确实可以让您的数据库对所有人开放,即使不是   使用您的应用程序,因此请确保在您使用时再次限制数据库   设置身份验证。

     

写入您的数据库

     

使用getInstance()和。检索数据库的实例   引用您要写入的位置。

// Write a message to the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");

myRef.setValue("Hello, World!");
     

您可以通过这种方式将一系列数据类型保存到数据库中,包括   Java对象。当您保存对象时,来自任何getter的响应   将被保存为此地点的孩子。

     

从您的数据库中读取

     

要实时更新您的应用数据,您应该添加一个   ValueEventListener到您刚刚创建的引用。

     

此类中的onDataChange()方法在触发时触发一次   每次数据更改时,都会再次附加侦听器,包括   孩子们。

// Read from the database
myRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // This method is called once with the initial value and again
        // whenever data at this location is updated.
        String value = dataSnapshot.getValue(String.class);
        Log.d(TAG, "Value is: " + value);
    }

    @Override
    public void onCancelled(DatabaseError error) {
        // Failed to read value
        Log.w(TAG, "Failed to read value.", error.toException());
    }
});