From 9f9f595fee9d88a8025a4f509adfc3fae911e52d Mon Sep 17 00:00:00 2001 From: Ly Tuan Kiet Date: Tue, 3 Dec 2024 19:35:12 +0700 Subject: [PATCH] feat: integrate Redis for session invalidation in ClerkService - Added RedisService to ClerkService for managing session invalidation. - Updated event handlers (eventSessionRevoked, eventSessionRemoved, eventSessionEnded, eventEmailCreated) to asynchronously delete sessions from Redis upon specific events. - Enhanced session management by ensuring sessions are properly invalidated in response to Clerk events. --- src/Clerk/clerk.service.ts | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/Clerk/clerk.service.ts b/src/Clerk/clerk.service.ts index 9a8be43..732cd8f 100644 --- a/src/Clerk/clerk.service.ts +++ b/src/Clerk/clerk.service.ts @@ -2,11 +2,14 @@ import { Injectable, Logger } from '@nestjs/common' import { PrismaService } from '../Prisma/prisma.service' import { clerkClient, WebhookEventType } from '@clerk/express' - +import { RedisService } from '../Redis/redis.service' export interface ClerkResponse {} @Injectable() export class ClerkService { - constructor(private readonly prisma: PrismaService) {} + constructor( + private readonly prisma: PrismaService, + private readonly redis: RedisService, + ) {} webhook(body: any) { // get the event type const eventType = body.type @@ -117,19 +120,25 @@ export class ClerkService { // to do: get session info } - eventSessionRevoked(data: any) { + async eventSessionRevoked(data: any) { Logger.log(data, 'ClerkService') + // invalidate session from redis + await this.redis.del(`session:${data.session_id}`) } - eventSessionRemoved(data: any) { + async eventSessionRemoved(data: any) { Logger.log(data, 'ClerkService') + // invalidate session from redis + await this.redis.del(`session:${data.session_id}`) } - eventSessionEnded(data: any) { + async eventSessionEnded(data: any) { Logger.log(data, 'ClerkService') + // invalidate session from redis + await this.redis.del(`session:${data.session_id}`) } - eventEmailCreated(data: any) { + async eventEmailCreated(data: any) { Logger.log(data, 'ClerkService') } }