Как я могу удалить сеанс после обновления до БД?
Я использовал express.js в качестве моего бэкенда, и я создал страницу входа.
это мой код для сеанса всервер / маршруты / api / signin.js:
/*
* Logout
*/
app.get('/api/account/logout', (req, res, next) => {
//get the token
const { query } = req;
const { token } = query;
UserSession.findOneAndUpdate({
_id: token,
isDeleted: false
}, {
$set: {
isDeleted: true
}
}, null, (err, sessions) => {
if(err) {
return res.send({
success: false,
message: 'Error: Server error'
});
}
return res.send({
success: true,
message: 'Good'
});
});
});
но после того, как я войду и выйду.я не могу зайти на страницу входа снова.поэтому я должен очистить кеш из своего браузера, а затем снова получить доступ к своей странице входа.Кто-нибудь знает эту проблему?
, и это моя функция в клиенте / приложение / компоненты / Home / Home.js для выхода из системы:
logout() {
this.setState({
isLoading: true,
});
const obj = getFromStorage('the_main_app');
if (obj && obj.token) {
const {token} = obj;
//verify token
fetch('/api/account/logout?token=' + token)
.then(res => res.json())
.then(json => {
if (json.success) {
this.setState({
token: '',
isLoading: false
});
} else {
this.state({
isLoading: false,
});
}
});
} else {
this.setState({
isLoading: false,
});
}
}
Страница входа в систему:
import React, { Component } from 'react';
import 'whatwg-fetch';
import { Link } from 'react-router-dom';
import { Button } from 'react-bootstrap';
import {
getFromStorage,
setInStorage
} from '../../utils/storage';
class Login extends Component {
constructor(props) {
super(props);
this.state = {
isLoading: true,
token: '',
signInError: '',
signInEmail: '',
signInPassword: '',
};
this.onTextboxChangeSignInEmail = this.onTextboxChangeSignInEmail.bind(this);
this.onTextboxChangeSignInPassword = this.onTextboxChangeSignInPassword.bind(this);
this.onSignIn = this.onSignIn.bind(this);
}
componentDidMount() {
const obj = getFromStorage('the_main_app');
if (obj && obj.token) {
const {token} = obj;
//verify token
fetch('/api/account/verify?token=' + token)
.then(res => res.json())
.then(json => {
if (json.success) {
this.setState({
token,
isLoading: false
});
} else {
this.state({
isLoading: false,
});
}
});
} else {
this.setState({
isLoading: false,
});
}
}
onTextboxChangeSignInEmail(event) {
this.setState({
signInEmail: event.target.value,
});
}
onTextboxChangeSignInPassword(event) {
this.setState({
signInPassword: event.target.value,
});
}
onSignIn() {
//Grab state and post request to backend
const {
signInEmail,
signInPassword
} = this.state;
this.setState({
isLoading: true,
});
// POST request to backend
fetch('/api/account/signin', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: signInEmail,
password: signInPassword,
}),
}).then(res => res.json())
.then(json => {
if (json.success) {
setInStorage('the_main_app', { token: json.token });
this.setState({
signInError: json.message,
isLoading: false,
signInEmail,
signInPassword,
token: json.token,
});
} else {
this.setState({
signInError: json.message,
isLoading: false,
});
}
});
}
render() {
const {
isLoading,
token,
signInError,
signInEmail,
signInPassword,
} = this.state;
if (isLoading){
return (<div><p>Loading...</p></div>);
}
if (!token) {
return (
<div>
<div className="the-form">
{
(signInError) ? (
<p>{ signInError }</p>
) : (null)
}
<center>
<div className="sign-in container">
<div className="panel panel-default">
<div className="panel-heading">
<h3 className="panel-title">
Sign In
</h3>
</div>
<div className="panel-body">
<div className="form-group">
<label htmlFor="email">Email:</label>
<input type="email" className="form-control" placeholder="Email" value={ signInEmail } onChange={ this.onTextboxChangeSignInEmail } />
</div>
<div className="form-group">
<label htmlFor="password">Password:</label>
<input type="password" className="form-control" placeholder="Password" value={ signInPassword } onChange={ this.onTextboxChangeSignInPassword } />
</div>
<Button bsStyle="primary" onClick={ this.onSignIn }>Sign In</Button>
<button className="btn btn-default" ><Link to="/signup">Register</Link></button>
</div>
</div>
</div>
</center>
</div>
</div>
);
}
return (
<div>
<center>
<alert>Login success!</alert><br/>
<button className="btn btn-default" ><Link to="/">← Go Back</Link></button>
</center>
</div>
);
}
}
export default Login;