使用 express/jwt 对受保护路由进行身份验证

时间:2021-06-27 10:46:20

标签: express get jwt middleware session-storage

当用户登录时,访问令牌被创建并发送给用户,然后存储在 sessionStorage 中。在此之前的一切正常。我的问题是我不知道如何使用访问令牌来访问受保护的路由。

express app.js(smoothies 是受保护的路由)

app.get('/smoothies', requireAuth, (req, res) => res.render('smoothies'));

authMiddleware.js

const User = require('../models/User');

const requireAuth = (req, res, next) => {
  const authHeader = req.headers['authorization']

  const token = authHeader && authHeader.split(' ')[1]
  // check json web token exists & is verified
  if (token) {
    jwt.verify(token, 'night of fire', (err, decodedToken) => {
      if (err) {
        console.log(err.message);
        res.redirect('/login?err=auth');
      } else {
        console.log(decodedToken);
        next();
      }
    });
  } else {
    res.redirect('/login?err=auth');
  }
};

// check current user

module.exports = { requireAuth };

smoothies.ejs

  var myHeaders = new Headers();
  myHeaders.append("Authorization", `Bearer ${token}`);

  var requestOptions = {
    method: 'GET',
    headers: myHeaders,
    redirect: 'follow'
  };

  fetch("http://localhost:3000/smoothies", requestOptions)
    .then(response => response.text())
    .then(result => console.log(result))
    .catch(error => console.log('error', error));
//Should I be even doing this fetch GET request on smoothie.ejs? 

 })

Smoothies 是受保护的路线。当我尝试使用 Postman 并使用授权向 (/smoothies) 发送 GET 请求时:不记名令牌,它可以工作并且我能够访问 /smoothies。但是,如果我尝试真正的应用程序,即使我的 sessionStorage 中有访问令牌,我也被拒绝访问。当我 console.log req.headers['authorization'] 时,它是未定义的,所以我猜我来自 Smoothie.ejs 的 GET 请求不起作用。有谁知道解决方案是什么?

0 个答案:

没有答案