auth checkpoint
auth dependecies not instaled in dev container
This commit is contained in:
1 parent
7378d37b36
commit
42002f8e6f
50 files changed
+3680
-636
No files matched your search
@@ -0,0 +1,80 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { JwtService } from '@nestjs/jwt';
|
||||
import { UserService } from '../users/user.service';
|
||||
import { CreateUserDto, LoginUserDto } from '../users/user.dto';
|
||||
import { AuthResponse, JwtPayload } from './types';
|
||||
import { UserRole } from '../entities';
|
||||
|
||||
@Injectable()
|
||||
export class AuthService {
|
||||
constructor(
|
||||
private userService: UserService,
|
||||
private jwtService: JwtService,
|
||||
) {}
|
||||
|
||||
async validateUser(
|
||||
username: string,
|
||||
password: string,
|
||||
): Promise<{
|
||||
id: string;
|
||||
username: string;
|
||||
email: string;
|
||||
role: string;
|
||||
} | null> {
|
||||
return this.userService.validateUser(username, password);
|
||||
}
|
||||
|
||||
async login(loginUserDto: LoginUserDto): Promise<AuthResponse> {
|
||||
const user = await this.validateUser(
|
||||
loginUserDto.username,
|
||||
loginUserDto.password,
|
||||
);
|
||||
if (!user) {
|
||||
throw new Error('Invalid credentials');
|
||||
}
|
||||
|
||||
const payload: JwtPayload = {
|
||||
sub: user.id,
|
||||
username: user.username,
|
||||
email: user.email,
|
||||
role: user.role as UserRole,
|
||||
};
|
||||
|
||||
return {
|
||||
access_token: this.jwtService.sign(payload),
|
||||
user: {
|
||||
id: user.id,
|
||||
username: user.username,
|
||||
email: user.email,
|
||||
role: user.role as UserRole,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
async register(createUserDto: CreateUserDto): Promise<AuthResponse> {
|
||||
// Default new users to USER role
|
||||
const userDto = {
|
||||
...createUserDto,
|
||||
role: UserRole.USER,
|
||||
};
|
||||
|
||||
const user = await this.userService.create(userDto);
|
||||
|
||||
const payload: JwtPayload = {
|
||||
sub: user.id,
|
||||
username: user.username,
|
||||
email: user.email,
|
||||
role: user.role,
|
||||
};
|
||||
|
||||
return {
|
||||
access_token: this.jwtService.sign(payload),
|
||||
user: {
|
||||
id: user.id,
|
||||
username: user.username,
|
||||
email: user.email,
|
||||
role: user.role,
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user