如何从firebase的snapshot.val()提取数据

axr492tv  于 2021-09-13  发布在  Java
关注(0)|答案(2)|浏览(309)

我有以下代码,需要从控制台中出现的userdata对象中提取密码,如下所示:
-mel7hm5pu3rghvxnylr:{名称:“wed”,密码:“wed”,用户名:“wed”}
我的代码是

const Login = e => {
    e.preventDefault();
    firebaseDb.child("authors").orderByChild("userName").equalTo(userName).once("value", snapshot => {
        if (snapshot.exists()) {
            const userData = snapshot.val();
            console.log(userData)

            if(userData.password !== password)
                window.alert("Username or Password are wrong!");

          else {
            history.push("/AuthorForm");
            localStorage.setItem("author-info", 

JSON.stringify(userName));
            }
  }
        });
    }
nxagd54h

nxagd54h1#

注意:使用这种方式是不安全的。任何发出登录请求的人都将获得该用户名的密码,因为您正在进行客户端验证。
除此之外,您的对象看起来像:

{ 
  "-MeL7hm5pU3RGhvXnYlR": {
    name: "wed", 
    password: "wed", 
    userName: "wed"
  }
}

你可以用 Object.values() 访问名称和密码字段。

const {name, password, userName} = Object.values(thatObjectAbove)[0]

console.log(name, password, userName)
olmpazwi

olmpazwi2#

对firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也将包含一个结果列表。
您的代码需要处理这样一个事实:它通常通过使用firebase的内置 forEach 方法:

firebaseDb.child("authors").orderByChild("userName").equalTo(userName).once("value", results => {
  if (results.exists()) {
    results.forEach((snapshot) => {
      const userData = snapshot.val();
      console.log(userData)

      if(userData.password !== password) {
            window.alert("Username or Password are wrong!");      
      }
      else {
        history.push("/AuthorForm");
        localStorage.setItem("author-info", 

        JSON.stringify(userName));
      }
    });
  }
});

相关问题