Angularfire2如何阻止新用户通过谷歌登录认证?
如何阻止新用户通过谷歌登录Firebase认证?
嘿,我懂你的困扰——你之前尝试用credential.additionalUserInfo.isNewUser来控制用户集合的写入,但发现认证系统还是会生成新用户,对吧?那是因为isNewUser是登录流程完成之后才触发的判断,这时候用户已经被创建进认证系统了,自然拦不住。要从根源上阻止新用户注册,得用下面两种方法:
方法1:通过Firebase控制台直接禁用新用户注册(最简单)
这是最直接的方案,不需要写任何代码:
- 打开你的Firebase控制台,进入「认证」模块
- 切换到「登录方法」标签,找到「谷歌」登录提供商
- 往下滑动找到「允许创建新用户」的开关,把它关闭
- 保存设置后,新用户尝试用谷歌登录时会直接被拒绝,只有已存在的认证用户才能正常登录
方法2:用Firebase Auth云函数实现自定义拦截逻辑(适合复杂规则场景)
如果你的需求更灵活(比如只允许特定域名的邮箱登录),可以用Auth的beforeCreate触发器,在用户被创建之前就拦截请求:
- 先安装Firebase CLI并初始化云函数(如果还没做过):
firebase init functions
- 在
functions/index.js中添加如下代码:
const functions = require("firebase-functions"); const admin = require("firebase-admin"); admin.initializeApp(); exports.blockNewUsers = functions.auth.user().beforeCreate((user, context) => { // 示例:只允许@yourcompany.com域名的邮箱注册 const allowedDomain = "yourcompany.com"; const userDomain = user.email.split("@")[1]; if (userDomain !== allowedDomain) { throw new functions.auth.HelperError("auth/operation-not-allowed", "Only users from yourcompany.com are allowed to register."); } // 如果要完全阻止所有新用户,直接抛出错误即可: // throw new functions.auth.HelperError("auth/operation-not-allowed", "New user registration is disabled."); });
- 部署云函数到Firebase:
firebase deploy --only functions
这样,当新用户尝试注册时,云函数会在用户被创建前触发校验,不符合规则的请求会被直接拒绝,不会在认证系统中生成用户。
最后再强调下:你之前用的additionalUserInfo.isNewUser只能用来控制登录后的业务逻辑(比如是否写入用户集合),但没法阻止用户被创建到认证系统里。要从源头拦截,必须用上面两种方案之一。
内容的提问来源于stack exchange,提问作者Kyle Abens
相关产品推荐
相关产品推荐

