如何将currentUser电子邮件插入实时数据库

时间:2019-01-02 07:13:00

标签: firebase react-native

每次我尝试将用户的电子邮件插入数据库时​​,都会出现一个错误消息:“第一个参数是无效的路径”。

return (

  <View style={styles.MainContainer}>
    <Text style={styles.textStyle}>Rate this Song</Text>
    <Text style={styles.textStyleSmall}>  {list.title}</Text>
    <Text style={styles.textStyleSmall}>  {list.artist}</Text>
    {/*View to hold our Stars*/}
    <View style={styles.childView}>{React_Native_Rating_Bar}</View>

    <Text style={styles.textStyle}>
    {/*To show the rating selected*/}
      {this.state.Default_Rating} / {this.state.Max_Rating}
    </Text>

    <TouchableOpacity
      activeOpacity={0.7}
      style={styles.button}

      onPress={() => {
        firebase.database().ref("Song title: "+ list.title +''+ "Artist: "+ list.artist + currentUser.email).set({Ratings : (this.state.Default_Rating)})
        alert('Thank you')}
    }>        
      <Text>Continue</Text>
    </TouchableOpacity>
    <Text>
     {currentUser && currentUser.email}
    </Text>
  </View>
);

}

预期结果是,当我在Firebase中查看数据库时,用户帐户名称应与艺术家名称一起出现在该帐户中

1 个答案:

答案 0 :(得分:0)

创建歌曲评级密钥的方式容易出错,因为您没有检查它是否符合limitations of a Firebase database key

  
      
  1. 最大768字节
  2.   
  3. 键是UTF-8编码的,不能包含换行符或以下任何字符:   。 $#[] /或任何ASCII控制字符(0x00-0x1F和0x7F)
  4.   

您肯定已经打破了第二个约束,因为电子邮件地址至少包含一个.字符。

firebase.database().ref("Song title: "+ list.title +''+ "Artist: "+ list.artist + currentUser.email).set({Ratings : (this.state.Default_Rating)})

请先对数据进行清理,然后再将其用作密钥,或者找到一种无需首先清理就不会使用“歌曲标题”和“艺术家姓名”之类的任意数据成为密钥的结构。

边注::您可能不想将所有数据存储为数据库中的“根节点”。考虑首先将它们构造在“评级”节点下。

如果您只需要一个唯一密钥即可直接解决某个歌手对当前歌曲的用户评价,那么您可以在该字符串上创建一个哈希值以创建有效的Firebase密钥。

firebase.database().ref("ratings").child(MD5(list.title + list.artist + currentUser.email)).set({Ratings : (this.state.Default_Rating)})