41 lines
1.0 KiB
TypeScript
41 lines
1.0 KiB
TypeScript
// refresh-token.interceptor.ts
|
|
import {
|
|
Injectable,
|
|
NestInterceptor,
|
|
ExecutionContext,
|
|
CallHandler,
|
|
} from '@nestjs/common';
|
|
import { Observable, of } from 'rxjs';
|
|
|
|
@Injectable()
|
|
export class LogoutInterceptor implements NestInterceptor {
|
|
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
|
|
const request = context.switchToHttp().getRequest();
|
|
const response = context.switchToHttp().getResponse();
|
|
|
|
const refreshToken = request.cookies?.refresh_token;
|
|
|
|
if (!refreshToken) {
|
|
// Send a custom 200 response when refresh token is missing
|
|
response.clearCookie('access_token');
|
|
response.clearCookie('refresh_token');
|
|
|
|
response.status(200).json({
|
|
statusCode: 200,
|
|
message: 'Logged-Out successfully',
|
|
});
|
|
|
|
// Prevent further handling
|
|
return of(null);
|
|
}
|
|
|
|
// Attach refresh token to request object for later use
|
|
request.user = {
|
|
...(request.user || {}),
|
|
refreshToken,
|
|
};
|
|
|
|
return next.handle();
|
|
}
|
|
}
|