feat: add jwt auth guard and profile endpoint
This commit is contained in:
@@ -0,0 +1 @@
|
||||
export const REQUEST_USER_KEY = 'user';
|
||||
@@ -0,0 +1,13 @@
|
||||
import { User } from '@/modules/users/user.entity';
|
||||
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
|
||||
import type { Request } from 'express';
|
||||
import { REQUEST_USER_KEY } from '../constants/request-headers.constants';
|
||||
|
||||
export const ActiveUser = createParamDecorator(
|
||||
(field: keyof User | undefined, ctx: ExecutionContext) => {
|
||||
const request: Request = ctx.switchToHttp().getRequest();
|
||||
const user = request[REQUEST_USER_KEY] as User;
|
||||
|
||||
return field ? user?.[field] : user;
|
||||
},
|
||||
);
|
||||
@@ -0,0 +1,6 @@
|
||||
import { Validate } from 'class-validator';
|
||||
import { MatchFieldsConstraint } from '../validators/match-fields.validator';
|
||||
|
||||
export const MatchField = (property: string) => {
|
||||
return Validate(MatchFieldsConstraint, [property]);
|
||||
};
|
||||
@@ -0,0 +1,23 @@
|
||||
import {
|
||||
ValidationArguments,
|
||||
ValidatorConstraint,
|
||||
ValidatorConstraintInterface,
|
||||
} from 'class-validator';
|
||||
|
||||
@ValidatorConstraint({ name: 'MatchFields', async: false })
|
||||
export class MatchFieldsConstraint implements ValidatorConstraintInterface {
|
||||
validate(value: any, args: ValidationArguments): boolean {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
||||
const [property] = args.constraints;
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
|
||||
const relatedValue = (args.object as any)[property];
|
||||
|
||||
return value === relatedValue;
|
||||
}
|
||||
|
||||
defaultMessage(args: ValidationArguments): string {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
||||
const [property] = args.constraints;
|
||||
return `${args.property} must match ${property}`;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user