Me encontré con un problema al descifrar un token en un proyecto, quiero extraer datos del token entrante, compararlos con los datos de la base de datos y luego realizar ciertas acciones. El problema es que cuando obtengo la carga útil de "jwtService.decode()", no puedo acceder al campo "decodedJwt.email", nido se queja de que "decodedJwt" no es un objeto. Pero si devuelve typeof "decodedJwt", entonces la respuesta es una cadena. Sin embargo, no puedo acceder al campo "correo electrónico" en el código mismo. Si devuelvo "decodedJwt" en esta función, entonces en cartero obtendré el objeto muy necesario con los campos necesarios, incluido el mismo campo de "correo electrónico". ¿Cuál es mi error?
Respuesta de nest: la propiedad 'correo electrónico' no existe en el tipo 'cadena | { [clave: cadena]: cualquiera; }'. La propiedad "correo electrónico" no existe en el tipo "cadena".ts(2339)
async refreshTokenByOldToken(authHeader: string) { const decodedJwt = this.jwtService.decode(authHeader.split(' ')[1]) return decodedJwt.email }porque su cadena decodedJwt es un tipo de datos diferente. Accedes a información de correo electrónico dos casos;
const decoded: JwtPayload = this.jwtService.decode(yourAccessToken); const email = decoded.email;O
Conversión de base 64
const base64Payload = authHeader.split(" ")[1]; const payloadBuffer = Buffer.from(base64Payload, "base64"); const updatedJwtPayload: JwtPayload = JSON.parse(payloadBuffer.toString()) as JwtPayload; const email = updatedJwtPayload.email;Necesitas lanzar el tipo. Indique explícitamente de qué tipo es.
type PayloadType = { email: string; } async refreshTokenByOldToken(authHeader: string) { const decodedJwt = this.jwtService.decode(authHeader.split(' ')[1]) as PayloadType; return decodedJwt.email } También puede hacer referencia PayloadType otros lugares, por ejemplo, en su servicio en lugar de string | { [key: string]: any; } puedes tener una string | PayloadType .