geo*_*van 5 jwt reactjs spring-boot
我正在学习使用 Spring Boot 2.0 和 React 进行全栈开发。身份验证和授权由 JWT 管理,应用程序按预期工作,只是刷新浏览器后必须重新登录。即使浏览器刷新后如何维护 JWT 令牌?
import React, { Component } from 'react';
import TextField from '@material-ui/core/TextField';
import Button from '@material-ui/core/Button';
import Snackbar from '@material-ui/core/Snackbar';
import Carlist from './Carlist';
import {SERVER_URL} from '../constants.js';
class Login extends Component {
constructor(props) {
super(props);
this.state = {username: '', password: '', isAuthenticated: false, open: false};
}
logout = () => {
sessionStorage.removeItem("jwt");
this.setState({isAuthenticated: false});
}
login = () => {
const user = {username: this.state.username, password: this.state.password};
fetch(SERVER_URL + 'login', {
method: 'POST',
body: JSON.stringify(user)
})
.then(res => {
const jwtToken = res.headers.get('Authorization');
if (jwtToken !== null) {
sessionStorage.setItem("jwt", jwtToken);
this.setState({isAuthenticated: true});
}
else {
this.setState({open: true}); // maintient snackbar ouvert
}
})
.catch(err => console.error(err))
}
handleChange = (event) => {
this.setState({[event.target.name] : event.target.value});
}
handleClose = (event) => {
this.setState({ open: false });
}
render() {
if (this.state.isAuthenticated === true) {
return (<Carlist />)
}
else {
return (
<div>
<br/>
<TextField tpye="text" name="username" placeholder="Username"
onChange={this.handleChange} /><br/>
<TextField type="password" name="password" placeholder="Password"
onChange={this.handleChange} /><br /><br/>
<Button variant="raised" color="primary" onClick={this.login}>Login</Button>
<Snackbar
open={this.state.open} onClose={this.handleClose}
autoHideDuration={1500} message='Check your username and password' />
</div>
);
}
}
}
export default Login;
Run Code Online (Sandbox Code Playgroud)
小智 -3
我会使用本地存储而不是像这样的会话存储
localStorage.setItem("jwt", jwtToken)
Run Code Online (Sandbox Code Playgroud)
而不是线
sessionStorage.setItem("jwt", jwtToken);
Run Code Online (Sandbox Code Playgroud)
检查开发控制台中的本地存储,刷新页面并查看它是否仍然存在。它可能需要在您的身份验证流程中进行一些其他更改才能基于 localStorage 而不是 sessionStorage 构建它;但是,这将解决页面刷新时丢失 jwt 的直接问题。
| 归档时间: |
|
| 查看次数: |
9023 次 |
| 最近记录: |