我正在构建一个聊天应用程序,我正在试图找出禁止系统。这个想法是,如果用户因为使用了禁止使用的单词而被禁止使用,那么将阻止他的账户进行身份验证。问题是,由于某种原因,它确实执行了代码,但只执行了signInWithRedirect()函数。看看我的代码:
const googleProvider = new GoogleAuthProvider();
const signInWithGoogle = async () => {
try {
const res = await signInWithRedirect(auth, googleProvider);
const user = res.user;
const q = query(collection(db, "banned"), where("uid", "==", user.uid));
const docs = await getDocs(q);
if (docs.exists()) {
//if exists ban the user
console.log('you cannot use this chat app , you are banned!)
这里也是LoginPage.jsx
function LoginPage() {
const [user] = useAuthState(auth)
const navigate = useNavigate()
console.log(user)
return (
<div>
<div style={{'display': 'none'}}>
<Navbar />
</div>
<Welcome />
</div>
)
}
这里也是signOut
const navigate = useNavigate()
const signOutWithGoogle = () => {
signOut(auth)
navigate('/')
}
这里是firebase firestore
我尝试使用promise,但是没有任何结果,我使用async,没有任何结果
我不会实现这样的"禁止";系统仅基于前端代码。实际上,恶意的最终用户很容易绕过基于对集合的标准查询的检查。
我会使用Firebase安全规则来强制驱逐:安全规则站在你的数据和恶意用户之间,并在后端执行/检查。最后,使用这种方法,用户仍然需要进行身份验证和登录,但不能与Firebase后端服务(如Firestore或Cloud Storage)进行交互。
具体如下:
- 编写一个基于特定集合的安全规则,其中为每个禁用用户创建一个文档,用户ID作为文档ID。然后可以使用
exists()
方法检查用户是否被禁止。 - 使用云功能禁止(也可能"取消禁止")一个用户。同样,使用云功能,代码在后端执行,因此您可以避免恶意用户编写可能"unban"的代码的可能性。他。