ホームページ > ウェブフロントエンド > jsチュートリアル > MERN スタックのロールベース認証: 完全ガイド

MERN スタックのロールベース認証: 完全ガイド

Susan Sarandon
リリース: 2025-01-10 22:39:42
オリジナル
331 人が閲覧しました

Role-Based Authentication in MERN Stack: A Complete Guide

認証は Web アプリケーションの重要な側面であり、許可されたユーザーのみが特定のリソースにアクセスできるようにします。ロールベース認証 (RBAC) は、これをさらに一歩進めて、ロールに基づいてユーザーに異なる権限を割り当てます。

この投稿では以下について説明します:
✅ ロールベース認証とは何ですか?
✅ ロールベースの認証を使用する理由
✅ MERN スタック アプリケーションに RBAC を実装する方法

ロールベース認証とは何ですか?
ロールベースのアクセス制御 (RBAC) は、ユーザーにロールが割り当てられ、各ロールに特定の権限が与えられるセキュリティ アプローチです。

たとえば、電子商取引アプリケーションでは次のようになります。

管理者は製品を追加、編集、削除できます。
販売者は自分の商品を管理できます。
お客様は商品の閲覧と購入のみが可能です。
これにより、ユーザーは自分の役割に関連するアクションのみを実行できるようになります。

ロールベースの認証を使用する理由
✔ セキュリティの強化 – 機密性の高い操作への不正アクセスを防ぎます。
✔ スケーラビリティ – システムの成長に合わせて、新しいロールと権限を簡単に追加できます。
✔ より良いユーザー管理 – コードを変更せずに権限を割り当てます。

MERN スタック アプリケーションに RBAC を実装するにはどうすればよいですか?
1️⃣ ユーザーモデルのセットアップ (MongoDB Mongoose)
models/user.model.js 内:

JavaScript
コードをコピー
const mongoose = require("mongoose");

const UserSchema = new mongoose.Schema({
ユーザー名: { タイプ: 文字列、必須: true、一意: true }、
電子メール: { タイプ: 文字列、必須: true、一意: true }、
パスワード: { タイプ: 文字列、必須: true },
役割: {
タイプ: 文字列、
列挙型: ["管理者", "販売者", "顧客"],
デフォルト: "顧客"
}
});

module.exports = mongoose.model("User", UserSchema);
?ここで、各ユーザーには役割フィールドがあり、これによって権限が決定されます。

2️⃣ 認証用の JWT トークンの生成
あなたのcontrollers/auth.controller.js内:

JavaScript
コードをコピー
const jwt = require("jsonwebtoken");
const User = require("../models/user.model");

const login = async (req, res) => {
const {メールアドレス、パスワード} = req.body;
const user = await User.findOne({ email });

if (!user || user.password !== パスワード) {
return res.status(401).json({ メッセージ: "無効な資格情報" });
}

const token = jwt.sign({ userId: user._id, role: user.role }, "SECRET_KEY", {expiresIn: "1h" });

res.json({ トークン, ロール: user.role });
};

module.exports = { ログイン };
?この関数は、ユーザーのロールを含む JWT トークンを生成します。

3️⃣ アクセスを制限するミドルウェアの作成
middlewares/auth.middleware.js:

JavaScript
コードをコピー
const jwt = require("jsonwebtoken");

constauthenticate = (req, res, next) => {
const token = req.header("認可")?.split(" ")[1];

if (!token) return res.status(403).json({ メッセージ: "アクセスが拒否されました" });

{
を試してください const デコード = jwt.verify(token, "SECRET_KEY");
req.user = デコードされました;
next();
} キャッチ (エラー) {
res.status(401).json({ メッセージ: "無効なトークン" });
}
};

const authorize = (ロール) => {
return (req, res, next) => {
if (!roles.includes(req.user.role)) {
return res.status(403).json({ メッセージ: "禁止" });
}
next();
};
};

module.exports = { 認証、認可 };
?認証 – ログインしているユーザーのみがルートにアクセスできるようにします。
? authorize – ロールに基づいてアクセスを制限します。

4️⃣ ユーザーの役割に基づいたルートの保護
Routes/admin.routes.js:

JavaScript
コードをコピー
const Express = require("express");
const { 認証、認可 } = require("../middlewares/auth.middleware");

const router =express.Router();

router.get("/admin-dashboard",authenticate,authorize(["admin"]), (req, res) => {
res.json({ メッセージ: "管理者ダッシュボードへようこそ" });
});

module.exports = ルーター;
?管理者ロールを持つユーザーのみが /admin-dashboard.

にアクセスできます。

5️⃣ React でのロールベースの UI の実装
App.js (フロントエンド):

JavaScript
コードをコピー
import { useState, useEffect } from "react";
import axios from "axios";

const App = () => {
const [role, setRole] = useState(null);

useEffect(() => {
const token = localStorage.getItem("トークン");
if (トークン) {
const デコード = JSON.parse(atob(token.split(".")[1]));
setRole(decoded.role);
}
}, []);

戻る (


MERN ロールベース認証へようこそ


{役割 === "管理者" && 管理者ダッシュボード}
{役割 === "販売者" && 販売者ダッシュボード}
{役割 === "顧客" && 顧客ダッシュボード}

);
};

デフォルトのアプリをエクスポート;
? UI には、ユーザーの役割に基づいてさまざまなダッシュボードが表示されます。

結論
ロールベース認証は、最新の Web アプリケーションにおいて不可欠なセキュリティ対策です。 MERN スタックに RBAC を実装すると、ユーザー権限を効率的に制御できます。

?次のステップ:
?管理者用の役割管理パネルを追加します。
?パスワードのデータベース暗号化を実装します。
?セキュリティを強化するには、リフレッシュ トークンを使用します。

もっと詳しく知りたいですか?質問はコメント欄に書き込んでください。 ?

以上がMERN スタックのロールベース認証: 完全ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート