admin管理员组

文章数量:1277586

Here is the code for JWT:

const express = require("express");
const jwt = require("jsonwebtoken");

const app = express();

app.use(express.json());

const user = [
  {
    name: "Rohan",
    id: 1,
  },
  {
    name: "Sophie",
    id: 2,
  },
  {
    name: "Charlie",
    id: 3,
  },
];
app.get("/", (req, res) => {
  res.send("Wele to Homepage");
});
app.get("/id", verifyToken, (req, res) => {
  res.json(user.filter((id) => user.name === req.user.name));
});

function verifyToken(req, res, next) {
  const authHeader = req.headers['authorization'];
  const token = authHeader && authHeader.split(" ")[1];

  if (token == null) return res.sendStatus(401);

  jwt.verify(token, "secretKey", (err, user) => {
    if (err) return res.sendStatus(403);
    req.user = user;
    next();
  });
}
app.post("/login", (req, res) => {
  const username = req.body.username;
  const user = { name: username };
  jwt.sign(user, "secretKey", (err, token) => {
    res.json({ token: token });
  });
});
app.listen(4000, () => {
  console.log("Server is listening on port: 4000");
});

Here is the code for JWT:

const express = require("express");
const jwt = require("jsonwebtoken");

const app = express();

app.use(express.json());

const user = [
  {
    name: "Rohan",
    id: 1,
  },
  {
    name: "Sophie",
    id: 2,
  },
  {
    name: "Charlie",
    id: 3,
  },
];
app.get("/", (req, res) => {
  res.send("Wele to Homepage");
});
app.get("/id", verifyToken, (req, res) => {
  res.json(user.filter((id) => user.name === req.user.name));
});

function verifyToken(req, res, next) {
  const authHeader = req.headers['authorization'];
  const token = authHeader && authHeader.split(" ")[1];

  if (token == null) return res.sendStatus(401);

  jwt.verify(token, "secretKey", (err, user) => {
    if (err) return res.sendStatus(403);
    req.user = user;
    next();
  });
}
app.post("/login", (req, res) => {
  const username = req.body.username;
  const user = { name: username };
  jwt.sign(user, "secretKey", (err, token) => {
    res.json({ token: token });
  });
});
app.listen(4000, () => {
  console.log("Server is listening on port: 4000");
});

The req.headers['authorization'] is returning undefined when console.log(The req.headers['authorization'])

This code for JWT always return Status 401 (Unauthorized) when the request is sent in the format Authorization: Bearer "token" ,

Please help !!

Share Improve this question asked May 5, 2020 at 1:42 ScythrineScythrine 631 gold badge1 silver badge6 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 7

Do you use the Postman for test?

add 'authorization' key in headers section on the postman, like picture:

and not need 'authHeader.split(" ")1;' , please change your code like this:

const token = req.headers["authorization"];
//   const token = authHeader && authHeader.split(" ")[1];
console.log(token)

I think the split syntax is incorrect. This code I have written below will work:

const authHeader = req.headers["authorization"];
  console.log(authHeader)
  const [bearer, token] = authHeader.split(' ');
  if (!token) {
    return res
      .status(401)
      .json({ error: 404, message: "Access denied. No token provided." });
  }

Use this to split.

const token = req.headers && req.headers["authorization"].split(' ')[1]

I am attaching a snippet for reference

const jwt = require('jsonwebtoken');
const User = require('../models/user');
exports.isAuth = async (req, res, next) => {
    if(req.headers && req.headers["authorization"]){
     const token = req.headers && req.headers["authorization"].split(' ')[1]
        const decode = jwt.verify(token, process.env.JWT_SECRET);

        const user = await User.findById(decode.userId);
        if(!user){
            return res.json({
                success: false,
                message: 'unauthorized access!'
            })
        }
       req.user = user;
       next();
    }else{
        res.json({success: false, message: 'unauthorized access!'})
    }
};

本文标签: javascriptreqheaders39authorization39 is undefined in Nodejs JWT(JSON WEB TOKEN)Stack Overflow