Итак, я настроил локальную и JWT-стратегии нормально, и они прекрасно работают. Я установил JWT cook ie через маршрут входа в систему. Я также хочу установить токен refre sh cook ie, а затем удалить и сбросить токен JWT через JWT AuthGuard, обновив его вручную и установив для флага ignoreExpiration
значение true.
Я хочу иметь возможность манипулировать файлами cookie через JWT AuthGuard. Я уже могу просматривать их, но я не могу установить их. Есть ли способ сделать это?
/************************
* auth.controller.ts
************************/
import { Controller, Request, Get, Post, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { AuthService } from './auth/auth.service';
import { SetCookies, CookieSettings } from '@ivorpad/nestjs-cookies-fastify';
import { ConfigService } from '@nestjs/config';
@Controller('auth')
export class AuthController {
constructor(
private readonly authService: AuthService,
private readonly configService: ConfigService,
) {}
@UseGuards(AuthGuard('local'))
@Post('login')
@SetCookies()
async login(@Request() request) {
const jwtCookieSettings = this.configService.get<CookieSettings>('shared.auth.jwtCookieSettings');
request._cookies = [{
name : jwtCookieSettings.name,
value : await this.authService.signJWT(request.user),
options: jwtCookieSettings.options,
}];
}
@UseGuards(AuthGuard('jwt'))
@Get('profile')
async getProfile(@Request() req) {
return req.user;
}
}
/************************
* jwt.strategy.ts
************************/
import { Strategy, StrategyOptions } from 'passport-jwt';
import { PassportStrategy } from '@nestjs/passport';
import { Injectable, Request } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor(private readonly configService: ConfigService) {
super(configService.get<StrategyOptions>('shared.auth.strategy.jwt.strategyOptions'));
}
async validate(@Request() request, payload: any) {
return payload;
}
}