You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:07:55