我正在使用本地通行证策略来保护登录路径,然后返回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: '/'
}
];
}
非常感谢您!
答案 0 :(得分:2)
您有几种选择,而不是像现在这样使用策略。
在后卫中,您可以访问ExecutionContext
时抛出异常,因此您可以context.switchToHttp().getResponse()
作为响应对象并能够根据需要设置标题(您目前正在尝试在策略文件中执行此操作)
使用nestjs-throttler之类的包并使用其修饰符来帮助设置速率限制