Firestore安全规则能否检查请求用户邮箱验证状态?无需自定义令牌
在Firebase Firestore安全规则中验证用户邮箱的问题
没问题,我来帮你理清这两个关键点:
无需自定义令牌也能验证用户邮箱
Firebase Auth会自动把已登录用户的核心身份信息(包括emailVerified状态)同步到Firestore安全规则的request.auth对象里——不管你用的是邮箱密码登录、第三方OAuth登录(比如Google、Facebook)还是其他Firebase Auth支持的登录方式,都不需要额外生成自定义令牌来获取这个字段。你写的
isEmailVerified()函数是可行的,但建议补充非空检查
直接判断request.auth.emailVerified确实能拿到用户的邮箱验证状态,但如果遇到未登录的请求(此时request.auth为null),规则会抛出错误。所以更稳妥的写法是先确认用户已登录,再检查邮箱验证状态:
function isEmailVerified() { return request.auth != null && request.auth.emailVerified == true; }
举个实际使用的例子,比如你想限制只有邮箱已验证的用户才能读取verifiedContent集合:
match /verifiedContent/{document} { allow read: if isEmailVerified(); }
需要注意的是,emailVerified状态是由Firebase Auth维护的——当用户完成邮箱验证流程(比如点击发送到邮箱的验证链接)后,这个状态会自动同步到安全规则中,不需要你手动更新或传递任何额外数据。如果用户是匿名登录的,request.auth里不会有email和emailVerified字段,这也是为什么要加非空检查的原因。
内容的提问来源于stack exchange,提问作者MTK90
相关产品推荐
相关产品推荐

