保護者かの判定ロジックを週背い

This commit is contained in:
rca 2024-06-18 01:54:06 +09:00
parent 20ca116e0a
commit 83da03384c

View File

@ -3,25 +3,17 @@ import { Request, Response, NextFunction } from "express";
import { Role } from "@src/enums"; import { Role } from "@src/enums";
export default function verifyParent(req: Request, res: Response, next: NextFunction) { export default function verifyParent(req: Request, res: Response, next: NextFunction) {
const authorizationHeader = req.headers["authorization"]; if (req.user) {
let token; if (req.user.claims.role === Role.PARENT) {
if (authorizationHeader) {
const token_ = authorizationHeader.split(" ")[1];
if (token_) {
token = token_;
} else {
return res.status(401).send("アクセス拒否: アクセストークンが必要なエンドポイントです");
}
} else return;
try {
// クレームに含まれるroleがPARENTであることを確認する
const decoded = jsonwebtoken.verify(token, "secret") as { role: string };
if (decoded.role !== Role.PARENT) {
return res.status(401).send("アクセス拒否: 親ユーザーのみアクセス可能なエンドポイントです");
}
next(); next();
} catch (error) { } else {
// トークンの検証に失敗した場合(この前にトークン検証が実行されているので流れることはないはず) res.status(401).json({
// TODO: 複数回解析する必要はなさそう message: '権限がありません(保護者のみ利用可能なAPIです)'
});
}
} else {
res.status(500).json({
message: 'エラーが発生しました(JWT解析結果が不正/未設定です)'
});
} }
} }