gpt4 book ai didi

reactjs - 浏览器刷新后丢失 JWT token

转载 作者:行者123 更新时间:2023-12-04 17:44:16 24 4
gpt4 key购买 nike

我在学习Full Stack Development with Spring Boot 2.0 and React .
身份验证和授权由 JWT 管理,应用程序按预期工作,除非我在刷新浏览器后必须重新登录。
即使在浏览器刷新后如何维护 JWT token ?

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;

最佳答案

我认为您根本不检查构造函数中本地存储中的 token 。当您重新加载页面时,您的构造函数会执行并设置 isAuthenticated = false , 本地存储中是否有 token 。在最终设置 isAuthenticated 之前,您应该添加额外的逻辑来检查本地存储中的 token 。 .放置此代码的最佳位置可能是 componentDidMount()功能。我的意思是将它最初设置为 false 然后在 componentDidMount() 中更新根据当前的授权状态。看看我的 GitHub ,我有一个带有这种身份验证流程设置的小型样板项目。希望这会有所帮助,编码愉快!

关于reactjs - 浏览器刷新后丢失 JWT token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52895670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com