我尝试使用express,mongoose和jsonwebtoken的护照,但在致电/ api时没有得到回应。请说出我错过的内容。
index.js:
获得护照和本地策略依赖关系:
var passport = require("passport"),
LocalStrategy = require("passport-local").Strategy;
配置护照:
app.use(passport.initialize());
passport.use(new LocalStrategy({
usernameField: "email"
},
function (username, password, done) {
User.findOne({email: username}, function (err, user) {
if (err) return done(err);
if (!user) {
return done(null, false, {message: "User doesnt exist"});
}
if (!user.comparePassword(password)) {
return done(null, false, {message: "Wrong password!"});
}
return done(null, user);
});
})
);
和路线:
app.use("/api/login", require("./controllers/login"));
在./controllers/login.js
:
function loginHandler(req, res, next) {
passport.authenticate("local", function(err, user, info) {
if (err) return next(err);
...
var token = jwt.sign({name: user.email}, req.app.get("superSecret"),{expiresIn: 60000});
return res.json({token: token});
});
}
答案 0 :(得分:1)
所以这已经相当晚了,但我只花了两天时间来解决这个问题。问题非常简单,并不是很明显:
function loginHandler(req, res, next) {
passport.authenticate("local", function(err, user, info) {
if (err) return next(err);
...
var token = jwt.sign({name: user.email}, req.app.get("superSecret"),{expiresIn: 60000});
return res.json({token: token});
})(req, res, next);
}
请注意,护照呼叫结束时添加了(req, res, next)
。这是必要的。如果没有这个,authenticate
函数将无法运行。