微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 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 举报,一经查实,本站将立刻删除。