👋
JWTのtokenをデコードするときのエラー
問題
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