Firebase Firestore /实时数据库:仅允许写入特定管理员用户

时间:2020-10-28 22:31:26

标签: javascript firebase firebase-authentication firebase-security

我已经设置了带有表单字段的基本客户端应用程序,可以输入一些数据。 我只在前端使用CDN的vanilla js和firebase SDK,而没有任何后端。 我设法使用电子邮件/密码创建登录/注册,并且可以将数据发送到RealtimeDB并取回数据。

现在,我想配置规则以仅启用我之前通过电子邮件注册的特定管理员用户(me)对数据库的写访问权限。 有什么方法可以只为我的电子邮件配置规则? 或者也许是一些令牌ID? 登录时,我返回一个idToken(其中包含我的邮件,并且我想可以唯一地标识我)。我可以通过某种方式在后端数据库规则配置中检查我的邮件还是令牌ID?那我该怎么做?

这是我的注册/登录代码:

atOffset(ZoneOffset.ofHours(8))

})

get :(设置相同),但没有idToken atm:

$("#register").submit(function(event) {
    event.preventDefault();
    let inputs = $("#register :input.form-control");
    console.log(inputs);
    var values = {};
    inputs.each(function() {
            values[this.name] = $(this).val();
    });

    axios.post(
        "https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=XXXX",values)
    .then(res => console.log("auth result:",res))
    .catch(err => console.log(err));
})

$("#login").submit(function(event) {
event.preventDefault();
let inputs = $("#login :input.form-control");
console.log(inputs);
var values = {};
inputs.each(function() {
        values[this.name] = $(this).val();
});
console.log("values:", values);
axios.post(
    "https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=XXXX",values)
.then(res => console.log("auth result:", res))
.catch(err => console.log(err));

和顺便说一句,使用tokenID进行请求的正确网址是什么?

1 个答案:

答案 0 :(得分:0)

编辑:我尝试发布自己的解决方案,因为我使用的是来自Google的特定REST路由来启用登录和注册,因此只能将登录名与我已经注册的仅管理员电子邮件一起使用。然后,我得到一个idToken,可以对客户端进行解码,所以我得到了user.uid,并且可以在前端中对该uid进行硬编码(以始终检查该uid,然后才允许对例如),可以用来将uid和数据一起传递。然后,在Firebase后端上,我可以检查该uid是否与请求uid相匹配(但是我不确定该如何发送,也许会随请求自动发送?)。

其次,我将不得不使用可能更简单的auth SDK,但随后我将不得不在前端显示我的firebase配置,但是如果我只限制对我的写操作并且可能只准备对注册用户? 但是该配置可以用于创建任何任意的新集合,对吗?有谁知道解决方案吗?