【问题标题】:Creating a custom token in firestore for a user in another firestore instance为另一个 Firestore 实例中的用户在 Firestore 中创建自定义令牌
【发布时间】:2019-07-22 10:53:09
【问题描述】:

我正在尝试为我正在处理的应用程序创建管理 CRM。为此,我有一个连接到主应用程序的云功能,它为 CRM 应用程序上的用户创建自定义令牌。我创建该令牌的方式如下:

  return admin.auth().createCustomToken(uid, {admin: true}).then((token: string) => {
                    console.log('Custom ID created!');
                    return  res.status(200).send(token);
                })

然后我以用户身份登录 CRM,将 uid 传递回此函数。在创建令牌时,我将其传递给 firestore 函数signInWithCustomToken(token)。主要提到的登录功能如下:

  signInWithEmailAndPassword(user): Observable<any> {
        return from(this.afAuth.auth.signInWithEmailAndPassword(user.email, user.password))
            .pipe(
                flatMap((res: any) => this.createAdminCustomtoken(res.user.uid)),
                flatMap((token: any) => this.signInWithToken(token))
            );
    }

但是,当我发送此请求时,我收到以下错误:

据我了解,此错误是因为我试图在另一个项目中提供一个项目的令牌 - 但是,这种行为是我需要做的事情。有解决方法吗?或者有没有更好的方法。

【问题讨论】:

    标签: javascript node.js firebase-authentication firebase-admin


    【解决方案1】:

    使用 Firebase Admin SDK 铸造的令牌只能用于初始化 Admin SDK 的项目。

    您不能使用来自一个项目的管理员凭据创建令牌,然后在另一个项目上使用该令牌登录。如果可能的话,那将是一个相当大的安全风险。

    相反,您必须使用其他项目的凭据初始化 Admin SDK,并使用它来生成令牌。

    【讨论】:

    • 感谢您的回答!只是几个问题: 1. 你是说我需要为 CRM 项目设置一个单独的管理 SDK 吗? 2. 如果是这样,我会从这个项目收到令牌,但是我如何使用该令牌来允许我访问原始项目的数据? I.E 如何将该令牌传递到主应用程序的 Firebase 规则中以允许对所有集合进行读写访问?
    猜你喜欢
    • 2018-11-14
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 2019-04-24
    • 1970-01-01
    • 2020-07-15
    相关资源
    最近更新 更多