Flutter Firebase signInWithCustomToken 与现有身份验证系统的用户 ID?

Posted

技术标签:

【中文标题】Flutter Firebase signInWithCustomToken 与现有身份验证系统的用户 ID?【英文标题】:Flutter Firebase signInWithCustomToken with an existing authentication system's user id? 【发布时间】:2022-01-19 09:52:40 【问题描述】:

我有一个带有自己的用户身份验证系统的 Laravel 应用程序。我仅将 firebase 用于实时聊天和推送通知。

为了将聊天对话存储在 Firestore 中,我可以直接写入/读取数据而无需任何身份验证系统。但是我需要用读/写规则保护数据,只允许经过身份验证的用户。

但我不想再次使用电子邮件和密码登录用户,而是想使用signInWithCustomToken 功能。根据文档,它说我可以传递我自己的自定义令牌,该令牌是在用户登录时从 laravel 应用程序创建的。

现在我的问题是,我不想使用 laravel 应用程序生成的令牌,而是想使用 laravel 应用程序数据库中的用户 ID

Laravel 应用用户表:

users table:
id | name | email | password | age
1  | mike | mike@example.com | hashedpass | 40

在 Firebase signInWithCustomToken 中,我可以将这样的用户 ID 作为 uid 传递吗?

const auth = getAuth();
const token = 1; ------------------------->user id from laravel

signInWithCustomToken(auth, token)
  .then((userCredential) => 
    // Signed in
    const user = userCredential.user;
    // ...
  )
  .catch((error) => 
    const errorCode = error.code;
    const errorMessage = error.message;
    // ...
  );

这是一个好习惯吗?所以我可以将 firebase 中的用户与 uid 和我的数据库的 user_id 匹配?

【问题讨论】:

【参考方案1】:

如果您想致电signInWithCustomToken 为用户签名,您必须始终为该用户创建一个自定义令牌。您不能为同一用户帐户从 signInWithEmailAndPassword 切换到 signInWithCustomToken

【讨论】:

谢谢弗兰克,我对整个signInWithCustomToken 方法有点困惑。我一直在关注这个firebase.google.com/docs/auth/admin/create-custom-tokens,现在有了一个更好的主意。一个问题是我在我的应用程序中使用 php/Laravel,如果不使用 google 服务帐户就无法生成 customToken? 我不确定您正在寻找什么其他方式来生成自定义令牌,但任何方式都需要某种形式的凭据,表明您有权为 Firebase 项目生成令牌。否则任何有权访问您项目的配置数据的人都可以生成他们想要的任何身份验证令牌,这将是一个很大的安全漏洞。

以上是关于Flutter Firebase signInWithCustomToken 与现有身份验证系统的用户 ID?的主要内容,如果未能解决你的问题,请参考以下文章

没有创建 Firebase 应用“[DEFAULT]” - 在 Flutter 和 Firebase 中调用 Firebase.initializeApp()

用于 Flutter 桌面嵌入的 Firebase 身份验证插件

Flutter : getDownloadUrl (firebase 存储)

Flutter + Firebase:如何实现“谷歌登录”

在 Flutter 中访问 Firebase 存储

添加flutter_firebase_ui后flutter应用程序崩溃