如何限制Firestore应用仅允许特定Gmail域名用户登录?
限制Firestore应用仅允许特定Gmail域名用户登录
我来帮你搞定这个需求——限制Firestore应用只允许abc.com域名的Google Workspace(原G Suite)用户登录,这里分身份验证拦截和Firestore安全规则加固两步来实现,双重保障不会出错:
1. 在Firebase Auth层面拦截非指定域名用户
这一步是在用户完成Google登录后,立刻检查邮箱域名,如果不符合就拒绝登录,避免无效用户进入系统。
前端代码示例(以Web为例)
假设你用的是Firebase Web SDK,在Google登录的回调里做检查:
import { getAuth, signInWithPopup, GoogleAuthProvider, signOut } from "firebase/auth"; const auth = getAuth(); const provider = new GoogleAuthProvider(); // 触发Google登录 document.getElementById('login-btn').addEventListener('click', async () => { try { const result = await signInWithPopup(auth, provider); const user = result.user; // 检查邮箱域名是否为abc.com const emailDomain = user.email.split('@')[1]; if (emailDomain !== 'abc.com') { // 注销不符合条件的用户 await signOut(auth); alert('仅允许abc.com域名的用户登录'); return; } // 域名验证通过,继续后续逻辑(比如跳转到应用主页) console.log('登录成功,用户:', user); } catch (error) { console.error('登录失败:', error); } });
可选:用Cloud Functions做后端验证(更安全)
如果担心前端代码被篡改,还可以用Cloud Functions的onCreate触发器,在用户创建账号时自动检查域名,不符合就删除账号:
const functions = require("firebase-functions"); const admin = require("firebase-admin"); admin.initializeApp(); exports.blockNonCompanyUsers = functions.auth.user().onCreate(async (user) => { const emailDomain = user.email.split('@')[1]; if (emailDomain !== 'abc.com') { await admin.auth().deleteUser(user.uid); functions.logger.log(`删除了非授权用户: ${user.email}`); } });
2. 配置Firestore安全规则(核心保障)
即使有人绕过了前端或Auth的拦截,Firestore的安全规则也能确保只有指定域名的用户能访问数据。在Firebase控制台的Firestore规则里更新为:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // 所有文档和集合的通用规则:仅允许abc.com域名的用户读写 match /{document=**} { allow read, write: if request.auth != null && request.auth.token.email.split('@')[1] == 'abc.com'; } } }
规则说明:
request.auth != null:确保用户已登录request.auth.token.email.split('@')[1] == 'abc.com':验证用户邮箱的域名是指定的abc.com
额外提示
如果你的公司使用Google Workspace,还可以直接在Firebase控制台做更严格的限制:进入Authentication > Sign-in method > Google,开启“限制域”并添加abc.com,这一步会直接在Auth层面拦截非该域的用户,不需要额外写代码。
内容的提问来源于stack exchange,提问作者Asif Mushtaq
相关产品推荐
相关产品推荐

