我是Firebase和React Native的新手,我正在开发一个基于用户的应用程序。在Firebase中,用户通过令牌进行身份验证,当涉及到个人属性时,他们似乎受到限制。据我所知,它的工作原理是,将自动为用户分配令牌和userId。如果你想添加额外的信息,你可以在实时数据库中创建一个对象来存储用户,并为用户分配他们所属的ID。
因此,我有两个用户和两个具有一些属性的用户对象。enter image description here
我使用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]);`
我的基本原则是:
` {
"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:请求失败,状态代码为401]
文档中说明auth变量包含uid(分配给请求用户的唯一用户ID),用户认证成功,但仍然无法工作,请帮助!提前感谢^^
更新:我已经找到了一种方法,但我认为这个解决方案存在安全问题。我尝试用UID命名用户,并将我的URL更改为:"https://fbapp-(不在此处)-default-rtdb. firebaseio. com/用户/"+{用户ID}+". json?auth ="+{令牌}不确定是否正确。
1条答案
按热度按时间gjmwrych1#
使用
access_token
对REST请求进行身份验证。有关详细信息,请参阅使用访问令牌进行身份验证。