javascript - 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') ....
解决方案
如果您遇到问题,这是解决方案,我从 passport-jwt 文档中复制了该策略,但由于这一行,它不起作用:
User.findOne({ _id: jwt_payload.id }, function(err, user)...
它一定要是{ _id: jwt_payload._id }
推荐阅读
- c++ - 调用带有指针对象错误的指针变量
- python-3.x - 加入列表后从列表中格式化字符串
- mysql - 将 sql 转储恢复到正在运行的 mysql/mariadb docker 容器中
- asp.net-web-api - 无法将 IActionResult 转换为 bool
- jenkins - 如何将 ECS 与 Jenkins 集成
- python - 如何在整个 python 数据帧中寻找相似之处?
- capistrano - Capistrano:如果其中任何主机未通过检查,我如何触发所有主机上的任务?
- apache-spark - Spark 作业状态正在运行,但第一步启动的时间几乎是 20 分钟后
- r - 使用 purrr 重命名 tibbles 列表中的不同列
- sharepoint - 更改 AD 后从用户信息列表中删除用户