我目前正在做一个fastify项目,在那里我使用fastify-jwt为我的用户创建Bearer令牌。
在我访问它的路线如下:
fastify.get(
"/test",
{
preValidation: [fastify.authenticate],
},
Collection.functionX
);
所以知道我想一些路线无法访问的“正常”用户,只有“管理员”用户。通常,这些信息都在令牌中。我可以大访问只有管理员内的功能,由我想直接不给予访问的路线。所以直接叫“不准”。
我发现fastify警卫,但它不工作.
3条答案
按热度按时间ou6hu8tu1#
我知道这个问题已经存在很长时间了。但我会在这里留下我的解决方案:
导入checkRole函数,并在您想要的路由中使用它(首先包括它)。
mpgws1up2#
你可以使用firebase认证或任何,并把用户在一个数据库与模式具有属性“角色”,然后检查这个角色在中间件,例如,如果角色==0其管理员等。
tpxzln5u3#
我只是从事实现工作,我想在这里留下我的方法,以防其他人可能会发现它有用。
Fastify有很好的插件来实现身份验证和授权。授权是验证你是谁,你说你是谁,授权是验证你有权访问资源,这取决于你是谁。
我发现最具可扩展性和维护性的方法是使用插件。我使用的插件是:
对于JWT的身份验证,你可以创建一个这样的插件:
然后,为了授权,您可以创建另一个插件,如下所示:
你可以这样从你需要的路线上调用它们:
从Fastify文档来看,身份验证最好在生命周期的早期完成,以防止DOS攻击。授权可以在稍后完成,如在precedent步骤中。角色的值将传递到路由的options.config中,您需要像上面的示例那样检查授权。
对于为授权和身份验证添加的装饰器,您可能需要扩展Fastify类型。你可以这样做:
此示例是通用的,涵盖了对选定路由的授权和身份验证检查。