首页 > 解决方案 > Passport JWT 未经授权返回

问题描述

我在这里检查了很多答案,但没有任何帮助。找不到护照设置有什么问题,这里是代码:

服务器.js

import express from "express";
import mongoose from "mongoose";
import cors from "cors";
import bodyParser from "body-parser";
import dotenv from "dotenv";
import passport from "passport";

dotenv.config({ silent: true });

import passportFunction from "./config/passport";

passportFunction(passport);

import routes from "./routes";

mongoose.connect(process.env.DB);
mongoose.connection.once("open", () => {
  console.log("Connected");
});

const app = express();

app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.use(passport.initialize());
app.use(passport.session());

passport.serializeUser(function(user, done) {
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  User.findById(id, function(err, user) {
    done(err, user);
  });
});

app.use("/api", routes);

app.listen(3000, () => {
  console.log("App running on port 3000");
});

Passport.js

import passportJWT from "passport-jwt";
var ExtractJwt = passportJWT.ExtractJwt;
var JwtStrategy = passportJWT.Strategy;

import User from "../models/user";

export default function(passport) {
  var opts = {};
  opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
  opts.secretOrKey = process.env.JWT_SECRET;
  passport.use(
    new JwtStrategy(opts, function(jwt_payload, done) {
      User.findOne({ _id: jwt_payload.id }, function(err, user) {
        if (err) {
          return done(err, false);
        }
        if (user) {
          return done(null, user);
        } else {
          return done(null, false);
          // or you could create a new account
        }
      });
    })
  );
}

我认为这是导入护照策略的问题,因为我使用了 ES6。在此之前我使用'require ...',但无法弄清楚,我在这里找到了答案,如何导入并将参数传递给函数,它没有显示任何错误但不起作用..

我像这样使用它router.post('/url', passport.authenticate('jwt') ....

标签: javascriptnode.jsjwtpassport.js

解决方案


如果您遇到问题,这是解决方案,我从 passport-jwt 文档中复制了该策略,但由于这一行,它不起作用: User.findOne({ _id: jwt_payload.id }, function(err, user)...

它一定要是{ _id: jwt_payload._id }


推荐阅读