驗證是許多 Web 應用程式的關鍵部分,保護 React 中的路由需要了解令牌(例如 JSON Web 令牌 (JWT))的工作原理。 JWT 可讓您在用戶端和伺服器之間安全地傳輸訊息,這對於在現代 Web 應用程式中實現使用者驗證特別有用。在本文中,我們將學習如何使用 JWT 在 React 中實現身份驗證。
什麼是智威湯遜?
JSON Web 令牌 (JWT) 是緊湊的 URL 安全令牌,用於表示雙方之間的聲明。 JWT 是單頁應用程式 (SPA) 中身份驗證的熱門選擇,因為它輕量級、無狀態且易於實現。
典型的 JWT 由三個部分組成:
1.標頭: 包含有關令牌的元數據,包括簽章演算法。
2. Payload: 包含您想要傳輸的聲明(資料),例如使用者資訊。
3.簽名: 用於驗證寄件者確實是其所說的人,並確保訊息在此過程中沒有被更改。
在 React 中實作 JWT 身份驗證的步驟
1。後端設定 (Node.js Express JWT)
- 安裝所需的依賴項:express、jsonwebtoken、bcryptjs。
- 設定一個簡單的 Express 伺服器並建立用於登入和受保護資料存取的路由。
- 成功登入後產生 JWT 令牌。 後端程式碼範例(Node.js Express JWT):
const express = require('express'); const jwt = require('jsonwebtoken'); const bcrypt = require('bcryptjs'); const app = express(); const users = [{ username: 'test', password: 'a$...' }]; // Example user data app.use(express.json()); app.post('/login', (req, res) => { const { username, password } = req.body; // Verify user credentials const user = users.find(u => u.username === username); if (user && bcrypt.compareSync(password, user.password)) { const token = jwt.sign({ username: user.username }, 'secretKey', { expiresIn: '1h' }); return res.json({ token }); } else { return res.status(401).send('Invalid credentials'); } }); app.listen(5000, () => console.log('Server running on port 5000'));
2。前端設定(React JWT):
- 使用 React 的 useState 和 useEffect 鉤子來管理身份驗證狀態。
- 成功登入後將 JWT 令牌儲存在本機儲存或 cookie 中。
- 使用 JWT 令牌向後端 API 發出經過驗證的請求。 前端程式碼範例(React JWT):
import React, { useState } from 'react'; import axios from 'axios'; function Login() { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const handleLogin = async (e) => { e.preventDefault(); try { const response = await axios.post('http://localhost:5000/login', { username, password }); localStorage.setItem('token', response.data.token); // Store the JWT alert('Login successful'); } catch (error) { alert('Login failed'); } }; return (); } function Dashboard() { const [data, setData] = useState([]); useEffect(() => { const token = localStorage.getItem('token'); if (token) { axios.get('http://localhost:5000/protected', { headers: { Authorization: `Bearer ${token}` } }) .then(response => setData(response.data)) .catch(error => console.error(error)); } }, []); return (
Protected Dashboard
{JSON.stringify(data, null, 2)}
3。保護路線:
- 使用 React Router 建立需要驗證的私有路由。
- 在允許存取受保護的路由之前檢查 JWT 令牌是否存在。 例子:
const PrivateRoute = ({ component: Component, ...rest }) => { const token = localStorage.getItem('token'); return ( <route render="{props"> token ? <component></component> : <redirect to="/login"></redirect>} /> ); }; </route>
結論
在 React 中實現 JWT 身份驗證是一個簡單的過程,涉及建立安全後端、在成功登入時產生令牌以及管理 React 中的身份驗證狀態。 JWT 提供了一種可擴展且無狀態的方式來管理現代 Web 應用程式中的身份驗證。
以上是如何使用 JWT(JSON Web 令牌)在 React 中實現身份驗證的詳細內容。更多資訊請關注PHP中文網其他相關文章!

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1
強大的PHP整合開發環境

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)