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.
This commit is contained in:
2024-12-03 19:35:12 +07:00
parent 029f21645b
commit 9f9f595fee

View File

@@ -2,11 +2,14 @@ import { Injectable, Logger } from '@nestjs/common'
import { PrismaService } from '../Prisma/prisma.service' import { PrismaService } from '../Prisma/prisma.service'
import { clerkClient, WebhookEventType } from '@clerk/express' import { clerkClient, WebhookEventType } from '@clerk/express'
import { RedisService } from '../Redis/redis.service'
export interface ClerkResponse {} export interface ClerkResponse {}
@Injectable() @Injectable()
export class ClerkService { export class ClerkService {
constructor(private readonly prisma: PrismaService) {} constructor(
private readonly prisma: PrismaService,
private readonly redis: RedisService,
) {}
webhook(body: any) { webhook(body: any) {
// get the event type // get the event type
const eventType = body.type const eventType = body.type
@@ -117,19 +120,25 @@ export class ClerkService {
// to do: get session info // to do: get session info
} }
eventSessionRevoked(data: any) { async eventSessionRevoked(data: any) {
Logger.log(data, 'ClerkService') 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') 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') 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') Logger.log(data, 'ClerkService')
} }
} }