【发布时间】:2022-11-24 20:33:36
【问题描述】:
我刚刚学习 nestjs 大约一天,我遇到了这个奇怪的错误,可能与我不了解我在做什么而匆忙完成项目有关,所以请多多包涵。我的主要问题是,在使用 JWT 身份验证时,来自正文的 JSON 是“用户名”,我无法更改它。我想使用 {"email":"test@gmail.com", "password": "password123"} 登录,但它只接受 {"username":"test@gmail.com", "password": “密码123”}。我的代码库中的任何地方都没有定义或提及“用户名”一词
用户.controller.ts
import { Controller, Get, Post, Body, Param, UseGuards } from '@nestjs/common';
import { UsersService} from './users.service';
import { CreateUserDto} from './dto/create-user.dto';
import { AuthGuard} from '@nestjs/passport';
@Controller('/users')
export class UsersController {
// constructor(private readonly usersService: UsersService) {}
constructor(private readonly userService: UsersService) {}
@UseGuards(AuthGuard('jwt'))
@Get('username')
getUserByEmail(@Param() param) {
return this.userService.getUserByEmail(param.email);
}
@Post('register')
registerUser(@Body() createUserDto: CreateUserDto) {
return this.userService.registerUser(createUserDto);
}
}
用户.service.ts
import { Injectable, BadRequestException } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { Model } from 'mongoose';
import { InjectModel } from '@nestjs/mongoose';
import { HashService } from './hash.service';
import { User, UserDocument} from '../schemas/user.schema'
@Injectable()
export class UsersService {
constructor(@InjectModel(User.name) private userModel: Model < UserDocument > , private hashService: HashService) {}
async getUserByEmail(email: string) {
return this.userModel.findOne({
email
})
.exec();
}
async registerUser(createUserDto: CreateUserDto) {
// validate DTO
const createUser = new this.userModel(createUserDto);
// check if user exists
const user = await this.getUserByEmail(createUser.email);
if (user) {
throw new BadRequestException();
}
// Hash Password
createUser.password = await this.hashService.hashPassword(createUser.password);
return createUser.save();
}
}
授权控制器.ts
import { AuthService} from './auth.service';
import { Controller, Request, UseGuards, Post} from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@Controller('auth')
export class AuthController {
constructor(private authService: AuthService) {}
@UseGuards(AuthGuard('local'))
@Post(`/login`)
async login(@Request() req) {
console.log(req.user, "here")
return this.authService.login(req.user);
}
}
这里是源码https://github.com/networkdavit/pillicam_test 非常感谢任何帮助或建议!
我尝试更改所有参数名称、用户模式、添加 DTO,我用谷歌搜索如何添加自定义参数名称或覆盖它,试图查找“默认用户名参数”是否确实存在。到目前为止,没有什么对我有用
【问题讨论】: