認証は、ユーザー データやパーソナライズされたエクスペリエンスを扱うアプリケーションにとって重要な部分です。 MERN スタック (MongoDB、Express、React、Node.js) で堅牢な認証システムを構築するには、バックエンド プロセスとフロントエンド プロセスの両方を理解する必要があります。このガイドでは、認証の設定手順を説明し、主要な概念、実際の例、ベスト プラクティスを取り上げます。
認証方法を理解すると、アプリケーションに最適なアプローチを決定するのに役立ちます:
バックエンドは、ユーザー登録、ログイン、認証ロジックを処理します。
必要なパッケージをインストールすることから始めます:
npm install express mongoose bcrypt jsonwebtoken dotenv
Mongoose を使用して、ユーザー資格情報を安全に保存するためのスキーマを作成します。
const mongoose = require("mongoose"); const bcrypt = require("bcrypt"); const UserSchema = new mongoose.Schema({ username: { type: String, required: true, unique: true }, email: { type: String, required: true, unique: true }, password: { type: String, required: true }, }); // Hash password before saving UserSchema.pre("save", async function (next) { if (!this.isModified("password")) return next(); this.password = await bcrypt.hash(this.password, 10); next(); }); module.exports = mongoose.model("User", UserSchema);
登録とログインのルートを実装します:
const express = require("express"); const User = require("./models/User"); const bcrypt = require("bcrypt"); const jwt = require("jsonwebtoken"); const router = express.Router(); const SECRET_KEY = "your_secret_key"; // Use dotenv in production // Register Route router.post("/register", async (req, res) => { const { username, email, password } = req.body; try { const user = new User({ username, email, password }); await user.save(); res.status(201).json({ message: "User registered successfully" }); } catch (err) { res.status(500).json({ error: "Error registering user" }); } }); // Login Route router.post("/login", async (req, res) => { const { email, password } = req.body; try { const user = await User.findOne({ email }); if (!user) return res.status(404).json({ error: "User not found" }); const isPasswordValid = await bcrypt.compare(password, user.password); if (!isPasswordValid) return res.status(401).json({ error: "Invalid password" }); const token = jwt.sign({ id: user._id }, SECRET_KEY, { expiresIn: "1h" }); res.status(200).json({ message: "Login successful", token }); } catch (err) { res.status(500).json({ error: "Error logging in" }); } }); module.exports = router;
トークンを検証してルートを保護します:
const jwt = require("jsonwebtoken"); function authenticateToken(req, res, next) { const token = req.headers["authorization"]; if (!token) return res.status(403).json({ error: "Access denied" }); jwt.verify(token, "your_secret_key", (err, user) => { if (err) return res.status(403).json({ error: "Invalid token" }); req.user = user; next(); }); } module.exports = authenticateToken;
安全なルートで使用します:
const express = require("express"); const authenticateToken = require("./middleware/authenticateToken"); const router = express.Router(); router.get("/profile", authenticateToken, (req, res) => { res.json({ message: `Welcome, User ${req.user.id}` }); });
React フロントエンドはユーザー セッションを管理し、バックエンドと通信します。
Axios を使用して API リクエストを処理します:
npm install axios
認証を管理するために React Context とフックを使用する:
import React, { createContext, useState, useContext } from "react"; import axios from "axios"; const AuthContext = createContext(); export const useAuth = () => useContext(AuthContext); export const AuthProvider = ({ children }) => { const [user, setUser] = useState(null); const login = async (email, password) => { const { data } = await axios.post("/api/login", { email, password }); localStorage.setItem("token", data.token); setUser(data.user); }; const logout = () => { localStorage.removeItem("token"); setUser(null); }; return ( <AuthContext.Provider value={{ user, login, logout }}> {children} </AuthContext.Provider> ); };
認証されていないユーザーをリダイレクトします:
import React from "react"; import { Navigate } from "react-router-dom"; import { useAuth } from "./AuthProvider"; const ProtectedRoute = ({ children }) => { const { user } = useAuth(); return user ? children : <Navigate to="/login" />; }; export default ProtectedRoute;
フィットネス アプリでは、ユーザーはページがリロードされた後でもセッションが持続することを期待します。適切なトークンの保管と検証がなければ、yu2019d は繰り返しログインする必要があります。
npm install express mongoose bcrypt jsonwebtoken dotenv
MERN の認証は、バックエンド ロジックとフロントエンド管理を組み合わせたものです。ベスト プラクティスに従うことで、安全でスケーラブルで使いやすい認証システムを作成できます。ソーシャル プラットフォーム、電子商取引サイト、SaaS アプリケーションのいずれであっても、認証をマスターすることでシームレスなユーザー エクスペリエンスが保証されます。
私たちは、イノベーションが繁栄し、テクノロジー愛好家が共に成長するコミュニティを構築しています。インスピレーションを与え、学び、創造する私たちの旅に参加しましょう!
?さらに詳しく:
?毎日のインスピレーションを得るためにフォローしてください:
? thecampuscoders.com
?テクノロジーの旅を促進するリソース、チュートリアル、アップデートを探索してください。
✨ 一緒に協力し、学び、未来を築きましょう!
アイデアや提案がありますか?私たちに連絡して、特別な何かに参加してください!
?お問い合わせ先: deepak@thecampuscoders.com
以上がMERN での認証をマスターする: 包括的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。