我正在使用firebase-admin在我的快速后端进行身份验证。我有一个中间件来检查请求是否经过身份验证。
public resolve(): (req, res, next) => void {
return async (req, res, next) => {
const header = req.header('Authorization');
if (!header || !header.split(' ')) {
throw new HttpException('Unauthorized', UNAUTHORIZED);
}
const token = header.split(' ')[1];
await admin.auth().verifyIdToken(token).then((decodedToken: any) => {
req.user = decodedToken;
next();
}).catch((error: any) => {
throw new HttpException(error, UNAUTHORIZED);
});
};
}
到目前为止,我只能对我的路线进行单元测试,以确保他们回复UNAUTHORIZED
而不是NOT_FOUND
。
it('GET /api/menu should return 401 ', done => {
const NOT_FOUND = 404;
const UNAUTHORIZED = 401;
supertest(instance)
.get('/api/menu')
.end((error, response: superagent.Response) => {
expect(response.status).not.toEqual(NOT_FOUND);
expect(response.status).toEqual(UNAUTHORIZED);
done();
});
});
但是,我想写更多的单元测试!我想模仿用户,所以我可以提出AUTHORIZED
个请求!我想使用我对用户的type
属性来验证某个type
的用户是否可以/不能使用某些路由。有没有人知道如何用firebase-admin-node做到这一点?
看起来firebase-admin-node repo会为单元测试here生成令牌,但我不确定如何将其应用于我的具体问题。