認証は多くの Web アプリケーションにとって重要な部分であり、React でルートを保護するには、JSON Web Token (JWT) などのトークンがどのように機能するかを理解する必要があります。 JWT を使用すると、クライアントとサーバー間で情報を安全に送信できます。これは、最新の Web アプリケーションにユーザー認証を実装する場合に特に役立ちます。この記事では、JWT を使用して React に認証を実装する方法を学びます。
JSON Web トークン (JWT) は、2 者間のクレームを表すために使用されるコンパクトで URL セーフなトークンです。 JWT は軽量でステートレスで実装が簡単であるため、シングルページ アプリケーション (SPA) の認証によく選ばれています。
一般的な JWT は 3 つの部分で構成されます。
1.ヘッダー: 署名アルゴリズムを含む、トークンに関するメタデータが含まれます。
2.ペイロード: ユーザー情報など、送信するクレーム (データ) が含まれます。
3.署名: 送信者が本人であることを確認し、メッセージが途中で変更されていないことを確認するために使用されます。
1.バックエンドのセットアップ (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):
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.ルートの保護:
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 中国語 Web サイトの他の関連記事を参照してください。