feat: implement role-based login validation to restrict user/agent portal access
This commit is contained in:
@@ -168,6 +168,20 @@ export class AuthService {
|
|||||||
throw new UnauthorizedException('Invalid email or password');
|
throw new UnauthorizedException('Invalid email or password');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Role-based login validation (only when loginRole is provided from web/mobile tabs)
|
||||||
|
if (dto.loginRole) {
|
||||||
|
if (dto.loginRole === 'USER' && user.role === UserRole.AGENT) {
|
||||||
|
throw new UnauthorizedException(
|
||||||
|
'This email is registered as an Agent. Please use the Agent tab to sign in.',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (dto.loginRole === 'AGENT' && user.role === UserRole.USER) {
|
||||||
|
throw new UnauthorizedException(
|
||||||
|
'This email is registered as a User. Please use the User tab to sign in.',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Check if 2FA is enabled
|
// Check if 2FA is enabled
|
||||||
if (user.twoFactorEnabled) {
|
if (user.twoFactorEnabled) {
|
||||||
// Generate temporary token for 2FA verification
|
// Generate temporary token for 2FA verification
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { IsEmail, IsString, MinLength } from 'class-validator';
|
import { IsEmail, IsOptional, IsString, MinLength } from 'class-validator';
|
||||||
import { ApiProperty } from '@nestjs/swagger';
|
import { ApiProperty } from '@nestjs/swagger';
|
||||||
|
|
||||||
export class LoginDto {
|
export class LoginDto {
|
||||||
@@ -16,4 +16,13 @@ export class LoginDto {
|
|||||||
@IsString()
|
@IsString()
|
||||||
@MinLength(1, { message: 'Password is required' })
|
@MinLength(1, { message: 'Password is required' })
|
||||||
password: string;
|
password: string;
|
||||||
|
|
||||||
|
@ApiProperty({
|
||||||
|
required: false,
|
||||||
|
enum: ['USER', 'AGENT'],
|
||||||
|
description: 'Which login tab the user selected (User or Agent)',
|
||||||
|
})
|
||||||
|
@IsOptional()
|
||||||
|
@IsString()
|
||||||
|
loginRole?: string;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user