React Native无需登录实现个性化通知的Firestore存储方案咨询
可行实现方案
完全可以实现不需要用户注册账号的前提下存储用户信息到Firestore,推荐优先使用匿名认证方案,全程用户无感知,不需要输入任何注册信息:
- 第一步:在Firebase控制台开启匿名认证能力,路径为:Firebase控制台 → 身份验证 → 登录方式 → 启用「匿名」登录选项
- 第二步:在React Native项目中调用匿名登录接口,获取用户唯一身份标识UID:
import { getAuth, signInAnonymously } from "firebase/auth"; const auth = getAuth(); signInAnonymously(auth) .then(() => { // 匿名登录成功,获取持久化的用户唯一UID const userUid = auth.currentUser.uid; }) .catch((error) => { // 按需处理登录异常逻辑 console.log(error.code, error.message); });
- 第三步:使用获取到的UID作为文档ID,向Firestore写入用户数据即可:
import { getFirestore, doc, setDoc } from "firebase/firestore"; const db = getFirestore(); await setDoc(doc(db, "users", userUid), { name: "John Doe", phone: "用户填写的手机号" });
匿名认证生成的UID会持久化存储在用户本地,只要用户不卸载应用、不清空应用缓存数据,该UID就不会发生变化,后续你可以随时读取对应用户的姓名信息生成个性化通知。如果后续业务需要升级为正式账号体系,也可以直接将匿名账号和邮箱、手机号等认证方式绑定,不会丢失已存储的用户数据。
如果确实不想使用任何认证能力,也可以直接调整Firestore安全规则开放未认证写入权限,但是该方案存在被恶意爬取、刷数据的风险,需要额外做字段校验、请求频率限制等安全控制,安全规则示例如下:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /users/{docId} { // 限制仅允许写入指定字段,且校验字段类型和长度 allow create: if request.resource.data.keys().hasOnly(["name", "phone"]) && request.resource.data.name is string && request.resource.data.phone is string && request.resource.data.name.size() <= 50 && request.resource.data.phone.size() <= 20; } } }
两种方案对比更推荐使用匿名认证方案,不需要用户做任何操作,同时数据权限可控,安全系数远高于直接开放未认证写入
内容的提问来源于stack exchange,提问作者isaac
相关产品推荐
相关产品推荐

