我是Firebase和React Native的新手,我正在构建一个基于用户的应用程序。在Firebase中,用户使用令牌进行身份验证,当涉及到个人属性时,他们似乎受到限制。据我所知,它的工作原理是,自动为用户分配令牌和userId。如果你想添加额外的信息,你可以在实时数据库中创建一个对象来存储用户,并为用户分配他们所属的ID。
我有几个用户和两个带属性的用户对象。输入图片描述
我使用Axios只对经过身份验证的用户执行GET请求:
` const authCtx = useContext(AuthContext);
const token = authCtx.token;
// console.log(token);
useEffect(() => {
axios
.get(
"https://fbapp-(heart)-default-rtdb.firebaseio.com/users.json?auth=" +
token
)
.then((response) => {
console.log(response.data);
});
}, [token]);`
我的firebase规则是:
` {
"rules":{
".write": "auth.uid != null ",
".read" : "auth.uid != null"
}
}`
这里的问题是,通过这些规则,每个经过身份验证的用户都可以访问实时数据库。经过一番研究,我发现我可以这样设置规则:
` {
"rules": {
"users":{
"$user_id":{
".write": "auth.uid === $user_id",
".read": "auth.uid === $user_id"
}
}
}
}`
据我所知,该规则适用于所有具有user_id属性的用户,并且只有具有当前UID的用户才能访问它们。但是这时我得到了以下错误:
警告:可能未处理的承诺拒绝(id: 0):[AxiosError: Request failed with status code 401]
文档说auth变量包含uid(分配给请求用户的唯一用户ID)。用户身份验证成功,但仍不能工作。请帮助!提前谢谢你^^
更新:我已经找到了一种使其工作的方法,但我认为解决方案存在安全问题。而不是将用户命名为"user1, user2,…"我尝试用UID命名它们,并将我的url更改为:"https://fbapp-(not here)-default-rtdb.firebaseio.com/users/"+{user_id}+ ".json?auth="+{token}我不确定这是否正确。
使用access_token
验证REST请求
`https://<DATABASE_NAME>.firebaseio.com/users.json?access_token=${token}`
详细信息请参见使用访问令牌进行身份验证。