代码之家  ›  专栏  ›  技术社区  ›  vir us

如何跨多个位置同步firebase用户?(扩展+网站)

  •  2
  • vir us  · 技术社区  · 8 年前

    我正在开发chrome扩展(提供主要功能)和补充网站(主要是配置文件和计费相关功能),这两个网站都有firebase后端支持。

    我想知道是否有可能实现以下场景:

    • 用户使用firebase身份验证(使用firebaseUI库)使用扩展登录
    • 我存储了一个令牌,可以用来重新验证该用户(是否有这样的令牌?)
    • 当用户打开网站时,我会使用令牌自动登录该用户。

    虽然分机和网站都有自己的登录/注册表单,但我想知道是否可以在分机中登录用户,并以某种方式自动在网站上登录同一用户,这样他们就不必输入两次凭据?

    到目前为止,我希望我可以使用以下内容:

    firebase.auth().currentUser.getIdToken(true).then(function(idToken) {
                console.log("idToken = ", idToken)
    })
    

    然后使用它 idToken 这样,因为如果我理解正确,这是AWT:

    firebase.auth().signInWithCustomToken(idToken).catch(function(error) {
        // Handle Errors here.
         var errorCode = error.code;
         var errorMessage = error.message;
         console.log("signInWithCustomToken: error = ", error)
     })
    

    但它给出了以下错误:

    code: "auth/invalid-custom-token"
    message: "The custom token format is incorrect. Please check the documentation."
    

    我可以在上解析令牌 https://jwt.io/ 显示所有用户信息,但最后显示“无效签名”

    所以我猜这个令牌只能用于检查身份验证(比如 admin.auth().verifyIdToken(idToken) )但不要登录用户。我说得对吗?

    我知道我可以创建一个自定义令牌,但是否有任何简单的方法来解决这个问题,并使用firebase funstionality从一个地方登录用户?(当然不存储用户名/密码)

    1 回复  |  直到 8 年前
        1
  •  3
  •   bojeil    8 年前

    您无法使用Firebase ID令牌登录。您可以执行以下操作:

    1. 将用户会话保留在chrome扩展中,并从那里运行所有经过身份验证的请求。使用 postMessage (带有来源验证)在发送请求时随时与应用程序的分机通话。这样,您就不必担心会话同步问题,也不会存储Firebase令牌或将其传递给web应用或每个可以访问扩展的web应用。

    2. 添加一个 邮件后处理 API以在验证请求的来源后从扩展获取ID令牌。然后,您可以使用ID令牌从web应用发送请求。(安全性不如1,但更易于实现,会话存储在一个位置)。

    3. 创建接受ID令牌并返回自定义令牌的HTTP端点。这会 verifyIdToken 然后使用 createCustomToken 由Admin SDK提供。那么你呢 邮件后处理 在验证来源和 signInWithCustomToken 在该web应用程序中使用该自定义令牌。这是最不安全的,因为您提供了一个端点来与无限期会话交换短暂的ID令牌。您还将处理同步问题(用户从chrome扩展注销,您必须从网站注销,等等)。

    推荐文章