В настоящее время я пытаюсь выучить nestjs, для этого я следовал официальному (cat-) учебнику по созданию базовой системы аутентификации пользователей.
При доступе к API для изменения имени пользователя или пароля запрос должен проверить, является ли пользователь действительным пользователем (чтение пользователя из базы данных).
Для сохранения пользователя у меня уже есть соединение mongodb.
В настоящее время я изо всех сил пытаюсь получить модуль / доступ к базе данных в охране.
Охрана работает, но только возвращает true, я пытался внедрить модуль базы данных, но безуспешно.
@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;
}
}
Правильный ли подход - расширить класс UserService с помощью метода findOne и внедрить его в службу?
@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;
}
}
Можете ли вы сказать мне, как выглядит правильный подход?
Заранее спасибо!