首頁 > web前端 > js教程 > 如何使用 JWT(JSON Web 令牌)在 React 中實現身份驗證

如何使用 JWT(JSON Web 令牌)在 React 中實現身份驗證

DDD
發布: 2025-01-13 14:26:43
原創
544 人瀏覽過

How to Implement Authentication in React Using JWT (JSON Web Tokens)

驗證是許多 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 (
    <form onSubmit={handleLogin}>
      <input type="text" value={username} onChange={(e) => setUsername(e.target.value)} />
      <input type="password" value={password} onChange={(e) => setPassword(e.target.value)} />
      <button type="submit">Login</button>
    </form>
  );
}

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 (
    <div>
      <h1>Protected Dashboard</h1>
      <pre class="brush:php;toolbar:false">{JSON.stringify(data, null, 2)}
); }
登入後複製

3。保護路線:

  • 使用 React Router 建立需要驗證的私有路由。
  • 在允許存取受保護的路由之前檢查 JWT 令牌是否存在。 例子:
const PrivateRoute = ({ component: Component, ...rest }) => {
  const token = localStorage.getItem('token');
  return (
    <Route
      {...rest}
      render={props => token ? <Component {...props} /> : <Redirect to="/login" />}
    />
  );
};
登入後複製

結論
在 React 中實現 JWT 身份驗證是一個簡單的過程,涉及建立安全後端、在成功登入時產生令牌以及管理 React 中的身份驗證狀態。 JWT 提供了一種可擴展且無狀態的方式來管理現代 Web 應用程式中的身份驗證。

以上是如何使用 JWT(JSON Web 令牌)在 React 中實現身份驗證的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板