правильный способ удаления cookie-файлов по истечении срока действия токена JWT - PullRequest
0 голосов
/ 16 апреля 2019

У меня аутентификация на основе 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, когда токен истекает, чтобы предотвратить этоошибки, устанавливая точно такую ​​же дату истечения срока действия, что и токен?или что?СПАСИБО!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...