👋

JWTのtokenをデコードするときのエラー

2024/03/24に公開

問題

tokenをデコードしたつもりがデコードされていませんでした。

import {NextRequest} from "next/server";
import jwt from "jsonwebtoken";

export const getDataFromToken= (request:NextRequest)=>{
    try {
        const token=request.cookies.get('token')?.value || '';

        const decodedToken=jwt.verify(token,process.env.TOKEN_SECRET!);

        return decodedToken.id;
    }catch (error:any){
        throw new Error(error.message)
    }

}

原因

なぜ、デコードされなかったのでしょうか。

  const decodedToken=jwt.verify(token,process.env.TOKEN_SECRET!);

decodedTokenは型を指定しない状態だとstring型と判定されていました。しかし、デコードされたtokenは下記のような型(実際のtokenとは異なる)になります。

{
"header": {
"alg": "HS256",
"typ": "JWT"
},
"payload": {
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
},
"signature": "signature"
}

解決策

そのため、

const decodedToken:any=jwt.vefify(token,process.env.TOKEN_SECRET!)

のようにany型を指定しなければいけませんでした。
Typescriptを使用しているので型定義をしっかりとしましょう。

Discussion