У меня аутентификация на основе jwt, и она хорошо работает для вызовов GET, но часто вызывает ошибки соединения, такие как net :: ERR_CONNECTION_RESET, net :: ERR_CONNECTION_ABORTED и т. Д. После выполнения запроса POST после истечения срока действия токена, поэтому я исследовал его и понял, чтоэто вызвано файлами cookie, поэтому я проверил браузер, и он не удалил файлы cookie, включая маркер jwt с истекшим сроком действия, но когда я обновил страницу, сервер отправил 401 HTTP-код и перенаправил меня на страницу (это хорошо, потому что это цель моего промежуточного программного обеспечения)
поэтому единственное, что я сейчас делаю, это проверяю, не существует ли токен, я отправляю код 401 и перенаправляю пользователя на страницу входа (это происходит, когда неавторизованный пользователь пытается достичь маршрутов, защищенных этим промежуточным ПО), иначе jwtпроверяет этот токен и, если есть ошибка, я проверяю, если имя ошибки s 'jwt expired', и если это так, я отправляю 401 статус и очищаю cookie перед этим.в противном случае я генерирую "req.userId", вот этот код:
const guardr = (req, res, next) =>{
const token = req.body.token ||
req.query.token ||
req.headers['x-access-token'] ||
req.cookies.token;
if(!token){
return res.status(401).send({redirect: true, location: '/sign-in'})
}
else{
jwt.verify(token, process.env.SECRET, function (err,decoded){
if(err){
if(err.message === 'jwt expired'){
res.clearCookie('token')
return res.status(401).send({redirect: true, location: '/sign-in'})
}
console.log(err.message)
return res.status(500).send({
message: err.message
})
}
req.userId = decoded.id;
next()
})
}
}
, но, как я уже сказал, в основном он не работает должным образом с запросом POST, я говорю в основном потому, что в настоящее время я отправляю данные с помощью formdata с этимкод
const data = new FormData();
data.append('image', this.fileRef.current.files[0]);
data.append('name', this.state.name);
...
, и этот код в большинстве случаев возвращает ошибку выше, но если я изменяю файлы [0] на файлы, эта ошибка не возвращается, но загрузка файла не работает (как только пропадает даже токен (файл cookie токена)был пуст)).на моей стороне сервера я не делаю ничего сложного, я просто получаю переменные, отправленные с formdata, и регистрирую их.но все же, если моя конфигурация мультитера важна, вот она
const storage = multer.diskStorage({
destination: (req, file, callback) => {
const userPath = path.join(imgStoragePath, req.userId);
fs.mkdir(
userPath,
() => callback(null, userPath)
)
},
filename: (req, file, callback) => {
const filenameParts = file.originalname.split('.');
const ext = filenameParts.pop();
const basename = filenameParts.join('.');
const additionalPath = Date.now() + '' + uuid() + '' +
Math.floor(Math.random() * (2000 - 500)) + 500;
callback(null, basename + '-' + additionalPath + '.' + ext);
}
})
const upload = multer({
storage,
limits: '1mb',
onError: function(err, next){
next(err)
}
})
, и я отправляю запрос с axios с этим кодом
axios({
method: 'post',
url: '/api/recipes',
config: {headers: {'Content-Type': 'multipart/form-data' }},
data: data
})
.then(res => {
console.log(res.data);
})
.catch(err => {
if(err.response){
if(err.response.data.redirect === true){
window.location.replace(err.response.data.location)
}
if(err.response.data.message){
alert(err.response.data.message)
}
}
});
, так как я могу удалить cookie, когда токен истекает, чтобы предотвратить этоошибки, устанавливая точно такую же дату истечения срока действия, что и токен?или что?СПАСИБО!