在React中,可以通过以下步骤将JWT令牌重定向到身份验证登录:
react-router-dom
和axios
。你可以使用以下命令进行安装:npm install react-router-dom axios
Login.js
。在该组件中,你可以创建一个表单来接收用户的用户名和密码,并在提交表单时发送POST请求以获取JWT令牌。import React, { useState } from 'react';
import axios from 'axios';
const Login = () => {
const [username, setUsername] = useState('');
const [password, setPassword] = useState('');
const handleSubmit = async (e) => {
e.preventDefault();
try {
const response = await axios.post('/api/login', { username, password });
const token = response.data.token;
// 将JWT令牌保存到本地存储或Cookie中
localStorage.setItem('token', token);
// 重定向到受保护的页面
window.location.href = '/protected';
} catch (error) {
console.error(error);
}
};
return (
<div>
<h2>Login</h2>
<form onSubmit={handleSubmit}>
<input
type="text"
placeholder="Username"
value={username}
onChange={(e) => setUsername(e.target.value)}
/>
<input
type="password"
placeholder="Password"
value={password}
onChange={(e) => setPassword(e.target.value)}
/>
<button type="submit">Login</button>
</form>
</div>
);
};
export default Login;
react-router-dom
库设置路由。确保将Login
组件与路径/login
关联起来,以便用户可以访问登录页面。import React from 'react';
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
import Login from './Login';
import ProtectedPage from './ProtectedPage';
const App = () => {
return (
<Router>
<Switch>
<Route path="/login" component={Login} />
<Route path="/protected" component={ProtectedPage} />
</Switch>
</Router>
);
};
export default App;
ProtectedPage.js
。在该组件中,你可以检查本地存储或Cookie中是否存在JWT令牌。如果令牌存在,则表示用户已经通过身份验证,可以显示受保护的内容。否则,重定向到登录页面。import React, { useEffect } from 'react';
const ProtectedPage = () => {
useEffect(() => {
const token = localStorage.getItem('token');
if (!token) {
// 重定向到登录页面
window.location.href = '/login';
}
}, []);
return (
<div>
<h2>Protected Page</h2>
<p>This page can only be accessed after authentication.</p>
</div>
);
};
export default ProtectedPage;
通过以上步骤,当用户访问受保护的页面时,React应用将检查JWT令牌是否存在。如果令牌不存在,用户将被重定向到登录页面。在登录页面,用户可以输入用户名和密码进行身份验证,并获取JWT令牌。一旦令牌被获取并保存,用户将被重定向回受保护的页面,可以访问受保护的内容。
领取专属 10元无门槛券
手把手带您无忧上云