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

问题描述

用户登录时,访问令牌被创建并发送给用户,然后存储在 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 请求不起作用。有谁知道解决方案是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)