【问题标题】:How to use passport with jwt如何在 jwt 中使用护照
【发布时间】:2016-05-09 23:32:06
【问题描述】:

我尝试将护照与 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});
  });
}

【问题讨论】:

    标签: node.js express mongoose passport.js passport-local


    【解决方案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 函数将无法运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 2015-01-18
      • 2019-06-23
      • 2018-04-21
      • 2018-01-13
      • 2020-03-08
      • 1970-01-01
      • 2019-10-02
      相关资源
      最近更新 更多