NestJS和Passport-在警卫中设置响应标头

时间:2020-11-07 12:49:54

标签: authentication passport.js nestjs passport-local

在我的 NestJS应用程序中的

我正在使用本地通行证策略来保护登录路径,然后返回jwt。此过程正确

现在,我在本地策略中实施了逻辑,以防止暴力行为(除了main.ts中的总速率限制),如here所述。当我抛出TooManyRequests HttpException时,我还想设置'Retry-After'标头,以便能够在前端为用户提供有用的信息。但是我无权访问守卫中的响应对象。我试图实现一个没有帮助的拦截器。另外,我只能在本地策略中访问“重试后”的计算值,因为该值是在此处计算的。

设置此标头的正确方法是什么?这是我的代码,目前无法正常工作。

import {Route} from '@angular/router';
import { HomeComponent } from './home/home.component';
export const routerConfig: Route[] = [
    {
        path: '',
        children:[
            //admin
            {
                path: 'api/users',
                component: DashboardComponent
            },
            {
                path: 'main/login',
                component: LoginComponent
            },

        ]},

    {
        path: '**',
        redirectTo: '/'
    }
];

}

非常感谢您!

1 个答案:

答案 0 :(得分:2)

您有几种选择,而不是像现在这样使用策略。

    如您所说,
  1. 后卫中,您可以访问ExecutionContext时抛出异常,因此您可以context.switchToHttp().getResponse()作为响应对象并能够根据需要设置标题(您目前正在尝试策略文件中执行此操作)

  2. 使用nestjs-throttler之类的包并使用其修饰符来帮助设置速率限制