Cómo implementar la función de “Recordarme” en el marco de NestJS con la estrategia de JWT
Estoy tratando de implementar la función de recordarme utilizando el marco de trabajo NestJS, ya tengo la implementación de Jwt y de la estrategia local funcionando de la siguiente manera:
import { ExtractJwt, Strategy } from 'passport-jwt';
import { PassportStrategy } from '@nestjs/passport';
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor(private configService: ConfigService) {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
ignoreExpiration: false,
secretOrKey: configService.get('JWT_SECRET'),
});
}
async validate(payload: any) {
return { userId: payload.sub, username: payload.email };
}
}
Estrategia local:
import { Strategy } from 'passport-local';
import { PassportStrategy } from '@nestjs/passport';
import { Injectable, UnauthorizedException } from '@nestjs/common';
import { AuthService } from '../services/auth.service';
@Injectable()
export class LocalStrategy extends PassportStrategy(Strategy) {
constructor(private authService: AuthService) {
super({ usernameField: 'email' });
}
async validate(email: string, password: string): Promise<any> {
const user = await this.authService.validateUser(email, password);
if (!user) {
throw new UnauthorizedException();
}
return user;
}
}
Pensé en una manera de resolverlo a través de la bandera ignoreExpiration
, ¿saben si hay una forma de implementarlo con el marco de trabajo NestJS? Intenté buscar en la documentación, pero parece que no está ahí.
davy.ai
Para implementar la función de “recordarme” utilizando el framework NestJS, puedes modificar la clase
JwtStrategy
para tener en cuenta una cookie con un tiempo de expiración más largo. Aquí tienes un ejemplo:Aquí estamos utilizando el método
fromExtractors
depassport-jwt
para verificar el token JWT en la cookie y en la cabecera de autorización. Luego, comprobamos si existe una cookie llamadaAuthentication
y si contiene la cadena'true'
como primer valor (recordarme). Si ese es el caso, establecemos el indicadorignoreExpiration
entrue
.Con este enfoque, puedes establecer un tiempo de expiración más largo para el token cuando el checkbox de “recordarme” esté marcado, y el usuario no se desconectará aunque el token haya expirado técnicamente pero la cookie siga siendo válida.