驗證結果
最後更新
本頁說明 VerifyJWT() 回傳的 VerifyResult 三個旗標代表什麼,以及每種情境對應的值。
結構
interface VerifyResult {
data?: AuthData;
isAuth: boolean;
isError: boolean;
isGuest: boolean;
}
| 旗標 | 意義 |
|---|---|
isAuth |
驗證成功,data 為使用者資料 |
isError |
請求可疑(指紋不符、簽章無效等),建議回 400 |
isGuest |
未登入;isAuth 為 false 時一律為 true |
情境對照
| 情境 | isAuth |
isError |
isGuest |
|---|---|---|---|
| Access Token 有效且指紋相符 | true |
false |
false |
| Access Token 過期,續期成功 | true |
false |
false |
| 沒有 Access Token 與 Refresh ID | false |
false |
true |
| Access Token 在撤銷黑名單 | false |
false |
true |
checkUserExists() 回傳 false |
false |
false |
true |
| Refresh 資料指紋不符 | false |
false |
true |
| Access Token 指紋不符 | false |
true |
true |
| 簽章無效或 Token 格式錯誤 | false |
true |
true |
| Refresh 資料不存在 | false |
true |
true |
路由分流
import { NextFunction, Request, Response } from "express";
import { JWTAuth } from "@pardnchiu/jwt-auth";
export async function requireAuth(req: Request, res: Response, next: NextFunction) {
try {
const result = await JWTAuth.VerifyJWT(req, res);
if (result.isAuth) {
res.locals.user = result.data;
return next();
}
res.status(result.isError ? 400 : 401).json({
error: result.isError ? "Bad Request" : "Unauthorized",
});
} catch (err) {
// 只有未呼叫 init() 時會到這裡
res.status(500).json({ error: (err as Error).message });
}
}
舊版回傳值
舊版 VerifyJWT() 回傳 AuthData 或狀態碼 400/401。JWTAuth.GetAuth() 可把舊值轉成同樣的三旗標結構:
| 輸入 | 輸出 |
|---|---|
AuthData |
{ ...data, isAuth: true, isError: false, isGuest: false } |
401 |
{ isAuth: false, isError: false, isGuest: true } |
400 |
{ isAuth: false, isError: true, isGuest: true } |