我在專案中遇到了解密令牌的問題,我想從傳入的令牌中提取資料,將其與資料庫中的資料進行比較,然后執行某些操作。問題是當我從“jwtService.decode()”獲取有效負載時,我無法訪問“decodedJwt.email”欄位,nest 抱怨“decodedJwt”不是一個物件。但是如果你回傳 typeof "decodedJwt" 那么答案是一個字串。但是,我無法訪問代碼本身的“電子郵件”欄位。如果我在此函式中回傳“decodedJwt”,那么在郵遞員中,我將獲得具有必要欄位的非常必要的物件,包括相同的“電子郵件”欄位。我的錯誤是什么?
來自巢的回復:型別“字串”上不存在屬性“電子郵件”| { [鍵:字串]:任何;}'。型別“string”.ts(2339) 上不存在屬性“email”
async refreshTokenByOldToken(authHeader: string) {
const decodedJwt = this.jwtService.decode(authHeader.split(' ')[1])
return decodedJwt.email
}
uj5u.com熱心網友回復:
您需要轉換型別。明確告訴它是什么型別。
type PayloadType = {
email: string;
}
async refreshTokenByOldToken(authHeader: string) {
const decodedJwt = this.jwtService.decode(authHeader.split(' ')[1]) as PayloadType;
return decodedJwt.email
}
您也可以參考PayloadType其他地方,例如在您的服務中,而不是string | { [key: string]: any; }您可以擁有string | PayloadType.
型別轉換的例子
uj5u.com熱心網友回復:
因為您的 decodedJwt 字串是不同的資料型別。您訪問電子郵件資訊的兩種情況;
- 如果你嵌套js-jwt包
const decoded: JwtPayload = this.jwtService.decode(yourAccessToken);
const email = decoded.email;
要么
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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/428131.html
標籤:javascript 目的 巢穴 解码 访问令牌
