node.js - 如何使用 Swagger 在 NestJs 中验证登录用户
问题描述
我刚开始在一个项目中使用nestjs。我已成功登录用户并返回令牌。现在使用令牌来授权用户是个问题。试图让所有用户返回“未经授权的访问”
我也认为我没有正确放置令牌。在 swagger 授权 UI 中,我提供
Bearer someTokenGoesHere
了输入框
这是我在 main.ts 中的代码 main.ts Swagger 配置
const options = new DocumentBuilder().addBearerAuth()
.setTitle('My app')
.setDescription('My app API description')
.setVersion('1.0')
.addTag('Tags')
.build();
const document = SwaggerModule.createDocument(app, options);
SwaggerModule.setup('', app, document);
用户控制器
import { Controller, Post, Body, Get, Param, UseGuards } from '@nestjs/common';
import { UserService } from './user.service';
import { CreateUserDto } from './create-user.dto';
import { LoginUserDto } from './login-user.dto';
import { AuthService } from 'src/auth/auth.service';
import { AuthGuard } from '@nestjs/passport';
import { AdminGuard } from 'src/guards/admin.guard';
import { ApiBearerAuth, ApiBasicAuth } from '@nestjs/swagger';
@Controller('user')
export class UserController {
constructor(private userService: UserService,
private authService: AuthService) { }
@Post('login')
async login(@Body() loginDTO: LoginUserDto) {
const user = await this.userService.login(loginDTO);
const newob = {
id: user._id
}
const payload = {
userId: user._id,
email: user.Email,
}
const token = await this.authService.signPayLoad(payload);
return { newob, token };
}
@Post('register')
async register(@Body() createDTO: CreateUserDto) {
const user = await this.userService.register(createDTO);
const newob = {
id: user._id
}
const payload = {
firstname: user.FirstName,
lastname: user.LastName
};
const token = await this.authService.signPayLoad(payload);
return newob;
}
@Get('all')
@ApiBearerAuth()
@UseGuards(AuthGuard('jwt'))
async getAllUsers() {
return await this.userService.getAllUsers();
}
@Post('confirm/:token')
async confirmEmail(@Param() token: string) {
const user = await this.userService.ConfirmEmail(token);
return user;
}
}
有人可以帮我吗谢谢
解决方案
我能够修复它,感谢您的建议。我正在提取有效负载中不存在的电子邮件。所以我决定记录它并发现它是空的。然后我注销有效负载,我发现我正在将用户 ID 传递到有效负载中。所以我改成id。
结果是
async findByPayLoad(payload: any) {
const { userId } = payload;
return await this.userModel.findById(userId)
}
推荐阅读
- node.js - 在角度最新版本中使用 Sass 时面临问题
- sql - 交叉应用缺少的关键字
- sql-server - 有排序规则问题的 SQL 查询
- java - 如何输入 char 作为输入以跳出正在寻找整数的循环?
- c# - 拉伸或重新采样一维数组
- sublimetext3 - 将 Bigdata.jar 或 Sinbad.jar 添加到 sublime。
- django - 如何在 django 中仅查找已登录的用户内容?
- javascript - 将html表单保存到表格中?
- python - 无法创建能够满足特定条件的 xpath
- dart - btw `BehaviorSubject` 和 `Sink` 有任何关系吗?和“流控制器”?