car*_*erd 3 javascript jwt nest
在我的服务器中实现 jwt 时出现此错误。我正在使用 NestJs 并且正在遵循文档。我一直在这里寻找有关此错误的解决方案,但似乎没有任何作用。我已将密钥存储在 .env 文件中,在 app.module 中添加 ConfigModule.forRoot() ,这样我就可以成功读取所有环境变量。这是我的代码,如果有人能指出我正确的方向。
应用程序模块.ts
@Module({
imports: [
ConfigModule.forRoot(),
TypeOrmModule.forRoot({
type: 'postgres',
host: process.env.DB_HOST,
port: +process.env.DB_PORT,
username: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
entities: ['dist/**/*.entity{.ts,.js}'],
synchronize: false,
}),
UsersModule,
AuthModule,
PolsModule,
],
controllers: [UsersController, AuthController, PolsController],
providers: [UsersService, AuthService, PolsService, JwtService],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
auth.module.ts
@Module({
imports: [
UsersModule,
PassportModule,
JwtModule.register({
secret: process.env.JWT_SECRET_KEY,
signOptions: { expiresIn: '4h' },
}),
],
providers: [AuthService, UsersService, LocalStrategy, JwtStrategy],
controllers: [AuthController],
})
export class AuthModule {}
Run Code Online (Sandbox Code Playgroud)
auth.controller.ts
@Controller('auth')
export class AuthController {
constructor(
private authService: AuthService,
private usersService: UsersService,
) {}
@UseGuards(LocalAuthGuard)
@Post()
async login(@Request() req) {
return this.authService.login(req.user);
}
}
Run Code Online (Sandbox Code Playgroud)
auth.service.ts
@Injectable()
export class AuthService {
constructor(
private usersService: UsersService,
private jwtService: JwtService,
) {}
async login(user: any) {
const payload = { username: user.username, sub: user.id };
console.log(process.env.JWT_SECRET_KEY);
return {
access_token: this.jwtService.sign(payload),
};
}
}
Run Code Online (Sandbox Code Playgroud)
控制台错误
// console.log(process.env.JWT_SECRET_KEY)
fb8C47vylwS
[Nest] 50225 - 01/07/2022, 17:46:37 ERROR [ExceptionsHandler] secretOrPrivateKey must have a value
Error: secretOrPrivateKey must have a value
at Object.module.exports [as sign] (/Users/user/dev/backend/pol-api/node_modules/jsonwebtoken/sign.js:107:20)
at JwtService.sign (/Users/user/dev/backend/pol-api/node_modules/@nestjs/jwt/dist/jwt.service.js:28:20)
at AuthService.login (/Users/user/dev/backend/pol-api/src/auth/auth.service.ts:26:37)
at AuthController.login (/Users/user/dev/backend/pol-api/src/auth/auth.controller.ts:29:29)
at /Users/user/dev/backend/pol-api/node_modules/@nestjs/core/router/router-execution-context.js:38:29
at processTicksAndRejections (internal/process/task_queues.js:95:5)
at /Users/user/dev/backend/pol-api/node_modules/@nestjs/core/router/router-execution-context.js:46:28
at /Users/user/dev/backend/pol-api/node_modules/@nestjs/core/router/router-proxy.js:9:17
Run Code Online (Sandbox Code Playgroud)
正如我所说,我尝试了在其他类似问题中找到的不同潜在解决方案(例如这个),但没有一个答案对我有用。
小智 10
我参加聚会迟到了,但我只是想办法解决这个问题,然后找到了解决方案。
问题可能出在 app.module.ts 中的这一行:
providers: [UsersService, AuthService, PolsService, JwtService],
Run Code Online (Sandbox Code Playgroud)
JwtService 不应添加为提供者。如果这样做,它似乎会重置所有已注册的选项。
| 归档时间: |
|
| 查看次数: |
2701 次 |
| 最近记录: |