gpt4 book ai didi

javascript - 如何从 nestjs guard 访问数据库

转载 作者:行者123 更新时间:2023-11-30 06:14:38 25 4
gpt4 key购买 nike

目前我正在尝试学习nestjs,为此我按照官方(cat-)教程构建了一个基本的用户身份验证系统。

当您访问 API 以更改用户名或密码时,请求应检查用户是否为有效用户(从数据库中读取用户)。为了存储用户,我已经有一个 mongodb 连接。

我目前正在努力寻找如何在守卫中获取数据库模块/访问权限。

守卫正在工作但只返回 true,我尝试注入(inject)我的数据库模块但没有成功。

@Injectable()
export class AuthGuard implements CanActivate {
canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean> {
const request = context.switchToHttp().getRequest();
return this.validateRequest(request);
}

validateRequest(execContext: ExecutionContext): boolean | Promise<boolean> | Observable<boolean>{
const request = execContext.switchToHttp().getRequest();
const user = request.user;
return true;
}
}

使用 findOne 方法扩展 UserService 类并将其注入(inject)到服务中是否是正确的方法?

@Injectable()
export class UserService{

constructor(@Inject('USER_MODEL') private readonly userModel: Model<User>){}

async create(createUserDto: CreateUserDto): Promise<User>{
const createdUser = new this.userModel(createUserDto);
return await createdUser.save();
}

async update(updateUserDto: UpdateUserDto): Promise<User>{
const updateUser = new this.userModel(updateUserDto);
return await this.userModel.updateOne({loginname: updateUser.loginname}, this.getUpdateQueryFromUserModel(updateUser));
}

async delete(deleteUserDto: DeleteUserDto): Promise<User>{
const deleteUser = new this.userModel(deleteUserDto);
return await this.userModel.deleteAll({loginname:deleteUser.loginname}).exec();
}

async findAll(): Promise<User[]> {
return await this.userModel.find().exec();
}

getUpdateQueryFromUserModel(userModel: Model<User>): Object {
let query = {};
if(userModel.dispname !== undefined && userModel.dispname !== null){
query["dispname"] = userModel.dispname;
}
if(userModel.pw !== undefined && userModel.pw !== null){
query["pw"] = hash.sha256().update(userModel.pw).digest('hex');
}
return query;
}
}

你能告诉我正确的方法是什么样的吗?提前致谢!

最佳答案

我找到了一个数据库访问的解决方案,你可以直接注入(inject)它(之前试过但失败了另一个问题)

@Injectable()
export class AuthGuard implements CanActivate {
constructor(@Inject('UserService')private readonly userService:UserService){}
canActivate(context: ExecutionContext): boolean | Promise<boolean> | Observable<boolean> {
const request = context.switchToHttp().getRequest();
return this.validateRequest(request);
}

async validateRequest(execContext: ExecutionContext): Promise<boolean>{
const request = execContext.switchToHttp().getRequest();
const user = request.user;
console.log(await this.userService.findAll());
return new Promise<boolean>((resolve, reject) => {
return true;
});
}
}

我的代码现在看起来像这样,在构造函数中注入(inject)了服务,但它仍然没有完全工作,因为当我尝试运行 execContext.switchToHttp().getRequest()行,我得到一个错误 switchToHttp is not a function,有人能帮忙吗?

问候帕斯卡

关于javascript - 如何从 nestjs guard 访问数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56888629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com