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:
@@ -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')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user