gpt4 book ai didi

javascript - 如何仅向 Firebase 中的第一个用户添加管理员 Angular 色?

转载 作者:行者123 更新时间:2023-12-02 23:17:31 25 4
gpt4 key购买 nike

我正在注册为第一个用户。

如何仅向 Firebase Firestore 数据库中的第一个用户添加管理员 Angular 色?

  const auth = firebase.auth();
const db = firebase.firestore();


// sign up the user
auth.createUserWithEmailAndPassword(email, password).then((cred) => {
// set admin to true for the only first user
return db.collection('users').doc(cred.user.uid).set({
admin: true
})

}).then(() => {
console.log();
}).catch(err => {

});

最佳答案

您可以创建一个云函数,当创建用户时会触发该函数。

import * as admin from 'firebase-admin';
import * as functions from 'firebase-functions';

admin.initializeApp({
databaseURL: "https://your-project-name.firebaseio.com"
});

export const onCreateUser = functions.auth.user().onCreate(async (createdUser) => {
const listUsersResult = await admin.auth().listUsers(2);

if (listUsersResult.users.length === 1) {
await admin.auth().setCustomUserClaims(createdUser.uid, {admin: true});
} else {
await admin.auth().setCustomUserClaims(createdUser.uid, {admin: false});
}

return;
});

使用 admin.auth().listUsers(1) 方法,您可以获得长度为 1 的用户数组。

如果创建的用户是该项目的第一个用户,则该方法返回一个空数组。如果是这种情况,用户自定义声明将设置为 {admin: true}

现在您可以创建一条安全规则,允许该用户访问所有 Firestore 文档。

service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth.uid != null && request.auth.token.admin == true;
}
}
}

可以通过 request.auth.token 属性访问自定义声明。

关于javascript - 如何仅向 Firebase 中的第一个用户添加管理员 Angular 色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57107270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com