如何授予经过身份验证的用户访问Firebase和React Native中其他属性的权限?[AxiosError:请求失败,状态代码为401]

ubbxdtey  于 2023-01-25  发布在  iOS
关注(0)|答案(1)|浏览(106)

我是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 ="+{令牌}不确定是否正确。

gjmwrych

gjmwrych1#

使用access_token对REST请求进行身份验证。

`https://<DATABASE_NAME>.firebaseio.com/users.json?access_token=${token}`

有关详细信息,请参阅使用访问令牌进行身份验证。

相关问题