如果上述内容可以正常工作,可以通过直接将策略名称传递给AuthGuard()来引入代码库中的魔术字符串。作为替代,我们推荐创建自己的类,如下所示:
时间: 2024-03-19 22:44:44 浏览: 12
是的,推荐创建自己的类来代替直接使用字符串传递给 `AuthGuard()` 类。
这种方法的好处是,可以将字符串转换为常量或枚举,以避免手误或拼写错误。例如,我们可以这样定义一个常量:
```
export const LOCAL_STRATEGY_NAME = 'local';
```
然后,在创建自己的本地认证守卫时,可以使用该常量:
```
import { Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { LOCAL_STRATEGY_NAME } from './constants';
@Injectable()
export class LocalAuthGuard extends AuthGuard(LOCAL_STRATEGY_NAME) {}
```
这样,如果在使用 `'local'` 字符串时不小心拼写错误或者出现了笔误,编译器将会直接提示出错误。而如果使用常量或枚举,则编译器可以在编译时检测到这些错误,从而提高代码的可靠性和可维护性。