【发布时间】:2020-01-05 06:24:43
【问题描述】:
我正在尝试使用 typescript 实现 firebase 功能。到目前为止,我能够毫无问题地创建一些功能,直到我不得不处理身份验证。 这是我第一次使用 typescript,所以我可能会问一些对大多数开发人员来说显而易见的问题。
上下文:
我能够使用这个example 实现身份验证检查。 正如我们在该示例(javascript)中看到的那样,代码正在解码令牌并将用户信息传递给请求,这将由下一个函数处理。
问题:
我的问题是我不知道如何在打字稿中做到这一点。 首先,我必须在我的令牌验证器函数的参数中添加一些类型,因为编译器抱怨没有类型(就像在 javascript 示例中一样),所以我选择了这样的东西:
const validateFirebaseIdToken = async (req: any, res: any, next: any)
问题是在我的下一个函数中我无法获取用户:
example.get('/', async (req, res) => {
req.user
}
我收到错误:“请求>”类型上不存在属性“用户”。
那么,在这种情况下你会怎么做呢?我不想在第二个函数中再次解码令牌,因为它没有意义(我在上一步(令牌验证)中已经这样做了)。
理想情况下:
我想使用与 javascript 示例中相同的方法。
我想在令牌验证函数中为参数添加正确的类型。我尝试使用 Request > 但编译器抱怨说该类型不是通用的(我从第二个函数推断出类型)
这是我的代码:
const validateFirebaseIdToken = async (req: any, res: any, next: any) => {}
const example = express();
example.use(validateFirebaseIdToken);
example.get('/', async (req, res) => {}
【问题讨论】:
-
发送到函数的请求是什么样的?
-
@ConstantinBeer 你的意思是客户的请求吗?如果是这样,那么它就像一个带有令牌进行身份验证的普通 http 请求。到目前为止,身份验证工作没有问题。我只需要做一些与发出这些请求的用户相关的操作。这就是为什么我需要在我的第二个函数中获取用户信息。
-
尝试使用req.body.user
-
嗨@chrismclarke。谢谢你的提示。我只是想尝试继续使用 typescript 的特性,比如静态类型,这就是我决定从 javascript 转向这种语言的原因。
-
@ConstantinBeer 你的建议对我有用。您要添加正确的答案以便我接受吗?
标签: typescript firebase firebase-authentication google-cloud-functions