如何限制Firebase邮箱密码认证仅接收特定域名请求
解决Firebase邮箱密码注册的域名限制问题
配置Firebase Auth授权域名
登录Firebase控制台,打开你的项目,进入「Authentication」模块,切换到「设置」标签页,在「授权域名」区域添加你允许的域名(比如你的生产环境域名、本地开发域名)。完成后,只有这些域名下的前端应用能正常调用Firebase Auth的客户端SDK接口,非授权域名的请求会被Firebase直接拦截。通过云函数强化来源校验(推荐)
虽然授权域名已经做了基础限制,但如果有人通过技术手段伪造请求,还可以用云函数接管注册逻辑,在服务端验证请求来源:
编写云函数代码如下:const functions = require("firebase-functions"); const admin = require("firebase-admin"); admin.initializeApp(); exports.registerUser = functions.https.onCall((data, context) => { // 定义允许的来源域名列表 const allowedOrigins = ["https://your-production-domain.com", "http://localhost:3000"]; const requestOrigin = context.rawRequest.headers.origin; if (!allowedOrigins.includes(requestOrigin)) { throw new functions.https.HttpsError("permission-denied", "请求来源不被允许"); } // 执行邮箱密码注册逻辑 return admin.auth().createUser({ email: data.email, password: data.password }).then(userRecord => { return { uid: userRecord.uid, message: "注册成功" }; }).catch(error => { throw new functions.https.HttpsError("internal", error.message); }); });前端不再直接调用
createUserWithEmailAndPassword,而是调用这个云函数来完成注册,这样能在服务端层面严格校验请求来源。注意事项
Firebase前端配置(apiKey、projectId等)属于公开信息,Firebase的安全体系本身不依赖隐藏这些配置,核心是靠权限规则、服务端验证来保障安全,所以无需刻意隐藏配置,重点做好上述的域名限制和校验即可。
内容的提问来源于stack exchange,提问作者TK88
相关产品推荐
相关产品推荐

