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

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";
export default function verifyParent(req: Request, res: Response, next: NextFunction) {
const authorizationHeader = req.headers["authorization"];
let token;
if (authorizationHeader) {
const token_ = authorizationHeader.split(" ")[1];
if (token_) {
token = token_;
if (req.user) {
if (req.user.claims.role === Role.PARENT) {
next();
} else {
return res.status(401).send("アクセス拒否: アクセストークンが必要なエンドポイントです");
res.status(401).json({
message: '権限がありません(保護者のみ利用可能なAPIです)'
});
}
} 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();
} catch (error) {
// トークンの検証に失敗した場合(この前にトークン検証が実行されているので流れることはないはず)
// TODO: 複数回解析する必要はなさそう
} else {
res.status(500).json({
message: 'エラーが発生しました(JWT解析結果が不正/未設定です)'
});
}
}