Flutter应用改用自有Node.js数据库时Firebase身份验证相关问题
问题解答
1. 能否搭配自有数据库使用Firebase用户身份验证
可以,这是非常常见的混合使用场景。Firebase Auth本身是独立的身份认证服务,和它的云存储、Firestore等数据服务没有强绑定。你只需要在用户完成Firebase Auth的登录/注册流程后,将Firebase返回的用户UID作为用户的唯一标识,关联存储到你自己的Node.js数据库中即可,两边的服务互不干扰。
2. 发送用户验证邮件是否需要自行搭建SMTP服务器
分两种情况:
- 如果你继续使用Firebase Auth的验证邮件能力:不需要额外搭建SMTP,Firebase自带邮件发送能力,你可以在Firebase控制台自定义邮件模板、发送域名。
- 如果你完全脱离Firebase Auth自己做身份体系:可以选择自行搭建SMTP服务器,也可以使用第三方邮件发送服务,两种方案都可行,不需要强制自建。
3. 不依赖Firebase能否实现「保持用户登录状态」的功能
完全可以。保持登录状态的底层逻辑和Firebase没有任何绑定,本质是客户端存储合法的身份凭证,后续请求携带凭证供服务端校验即可,完全可以自己实现整套逻辑。
4. 具体实现方案
混合使用Firebase Auth+自有Node.js后端的方案(改动最小)
- 客户端侧依旧保留Firebase Auth的注册、登录、邮箱验证相关逻辑,用户登录成功后获取Firebase返回的
idToken - 客户端每次请求你的Node.js后端时,在请求头中携带该
idToken - Node.js后端集成Firebase Admin SDK,对每次请求携带的
idToken进行校验,校验通过后取出其中的用户UID,从自有数据库中查询对应用户的业务数据返回即可 - 邮件验证直接使用Firebase控制台自带的邮件服务配置即可,不需要额外处理
完全脱离Firebase的全自研方案
- 身份认证逻辑:Node.js后端自己实现注册、密码加密存储(推荐用
bcrypt库)、登录校验逻辑 - 保持登录状态:登录校验通过后,后端生成有效期7-30天的JWT令牌返回给客户端,客户端将JWT存储到Flutter的
shared_preferences或者安全存储库flutter_secure_storage中,每次请求携带JWT到后端校验即可 - 邮件发送:可选两种方案,要么自行搭建Postfix等SMTP服务,要么集成第三方邮件SDK完成验证邮件的发送,邮件中携带用户唯一标识的校验参数,用户点击后调用后端接口完成账号激活即可
内容的提问来源于stack exchange,提问作者user16754196
相关产品推荐
相关产品推荐

