Add logout endpoint for admin and user

master
nicekid1 1 month ago
parent b043c75f92
commit ed88f811ef
  1. 13
      src/admin/admin.controller.ts
  2. 15
      src/admin/admin.service.ts
  3. 8
      src/users/users.controller.ts
  4. 11
      src/users/users.service.ts

@ -10,14 +10,21 @@ export class AdminController {
constructor(private readonly adminService: AdminService) {}
// register as a admin
@Post("register")
async register(@Body() createAdminDto: CreateAdminDto): Promise<{message}> {
async register(@Body() createAdminDto: CreateAdminDto): Promise<{ message }> {
return this.adminService.register(createAdminDto);
}
//login as admin
@Post("login")
async login(@Body() loginAdminDto: LoginAdminDto): Promise<{ accessToken, refreshToken }> {
async login(@Body() loginAdminDto: LoginAdminDto): Promise<{ accessToken; refreshToken }> {
return this.adminService.login(loginAdminDto);
}
//logout user
@UseGuards(RoleGuard)
@Get("logout")
async logout(@Request() req) {
const userId = req.user.id;
return this.adminService.logout(userId);
}
//get a new access token
@Post("new-token")
async newAccessToken(@Body("refreshToken") refreshToken: string) {
@ -26,7 +33,7 @@ export class AdminController {
//edit admin profile
@UseGuards(RoleGuard)
@Put()
async editAdminProfile(@Request() req, @Body() updateAdminDto: UpdateUserDto): Promise<{message}>{
async editAdminProfile(@Request() req, @Body() updateAdminDto: UpdateUserDto): Promise<{ message }> {
const userId = req.user.id;
return this.adminService.editAdminProfile(userId, updateAdminDto);
}

@ -64,6 +64,10 @@ export class AdminService {
expiresIn: this.configService.get<string | number>("JWT_REFRESH_EXPIRES") || "7d",
},
);
await this.adminModel.update(
{ refreshToken }, //
{ where: { id: admin.id } },
);
return { accessToken, refreshToken };
} catch (error) {
@ -73,6 +77,17 @@ export class AdminService {
throw new HttpException("An unexpected error occurred. Please try again later.", HttpStatus.INTERNAL_SERVER_ERROR);
}
}
//logout (delete refresh token from database)
async logout(userId: number) {
const user = await this.adminModel.findOne({
where: { id: userId },
});
if (!user) {
throw new HttpException("User not found.", HttpStatus.NOT_FOUND);
}
await this.adminModel.update({ refreshToken: null }, { where: { id: userId } });
return { message: "logout is successful" };
}
//getting new access token
async newAccessToken(refreshToken: string) {
if (!refreshToken) {

@ -25,7 +25,13 @@ export class UsersController {
async newAccessToken(@Body("refreshToken") refreshToken: string) {
return this.usersService.newAccessToken(refreshToken);
}
//logout user
@UseGuards(JwtAuthGuard)
@Get('logout')
async logout(@Request() req) {
const userId = req.user.id;
return this.usersService.logout(userId);
}
//retrieve a user information
@UseGuards(JwtAuthGuard)
@Get()

@ -110,6 +110,17 @@ export class UsersService {
return { accessToken };
}
//logout (delete refresh token from database)
async logout(userId: number) {
const user = await this.userModel.findOne({
where: { id: userId },
});
if (!user) {
throw new HttpException("User not found.", HttpStatus.NOT_FOUND);
}
await this.userModel.update({ refreshToken: null }, { where: { id: userId } });
return{message:"logout is successful"}
}
//get information user method
async getProfile(userId: number): Promise<User> {
try {

Loading…
Cancel
Save