首页 > 解决方案 > 节点js不能发布未经授权

问题描述

当我尝试挂载我的 isLoggedinMiddlware.js 时,我一直面临 401 未授权错误的错误,即使我可以设法打印存储的令牌,它仍然说它已授权。任何建议或帮助将不胜感激!祝你今天过得愉快。

这是我的 isLoggedinMiddleware.js

const jwt = require("jsonwebtoken");
const JWT_SECRET = process.env.JWT_SECRET;

module.exports = (req, res, next) => {
  const authHeader = req.headers.authorization;
  if (authHeader === null || authHeader === undefined || !authHeader.startsWith("Bearer ")) {
    res.status(401).send();
    return;
  }
  const token = authHeader.replace("Bearer ", "");
  jwt.verify(token, JWT_SECRET, { algorithms: ["HS256"] }, (error, decodedToken) => {
    if (error) {
      res.status(401).send();
      return;
    }
    req.decodedToken = decodedToken;
    next();
  });
};

这是我的帖子 api

app.post("/listings/",isLoggedInMiddleware,(req,res)=>{
  listings.insert(req.body,(error,result)=>{
    if(error){
      console.log(error)
      console.log(req.body)
      console.log(isLoggedInMiddleware)
      res.status(500).send('Internal Server Error')
      return;
    }
    console.log(result)
    res.status(201).send({"Listing Id":result.insertId})
  })
})

这是我的前端

   const baseUrl = "http://localhost:3000";
const loggedInUserID = parseInt(localStorage.getItem("loggedInUserID"));
const token = localStorage.getItem("token")
console.log(token)

if(token === null || isNaN(loggedInUserID)){
    window.location.href = "/login/"
}else{

    $('#logoff').click(function(){
    event.preventDefault();
    localStorage.removeItem('token')
    localStorage.removeItem('loggedInUserID')
    window.alert('Logging out now')
    window.location.href = "/login/"
    })
         $(document).ready(function () {            
        $('#submitbtn').click((event) => {
            const loggedInUserID = parseInt(localStorage.getItem("loggedInUserID"));
            // middleware =  {headers:{'Authorization':'Bearer '+token},data:{id: loggedInUserID}}

            event.preventDefault();
            const itemName = $("#itemName").val();
            const itemDescription = $("#itemDescription").val();
            const price = $('#price').val();
            const image = $('#image').val();
            const requestBody = {
                itemName: itemName,
                itemDescription: itemDescription,
                price: price,
                fk_poster_id: loggedInUserID,
                imageUrl: image
            }
            console.log(requestBody);
            axios.post(`${baseUrl}/listings/`,{headers:{'Authorization':'Bearer '+token},data:{id: loggedInUserID}}, requestBody)
                .then((response) => {
                    window.alert("successfully Created")
                })
                .catch((error) => {
                    window.alert("Error")
                    console.log(requestBody)

                })
        })
    })  

}

我可以设法获取我登录时存储的令牌,但是,它仍然说 401 unauthorized。

标签: node.jsjwtaxios

解决方案


推荐阅读