护照反序列化用户未在帆中调用

Posted

技术标签:

【中文标题】护照反序列化用户未在帆中调用【英文标题】:passport deserializeUser not called in sails 【发布时间】:2015-12-22 06:50:25 【问题描述】:

我正在使用 Sails 0.11 版并尝试使用 jwt 身份验证配置应用程序。

配置/passport.js

var passport      = require('passport');
var jwt = require('express-jwt');

module.exports = 

  http: 
    customMiddleware: function(app) 
      console.log('express midleware for passport');
      app.use(jwt( secret: sails.config.session.secret, credentialsRequired: false).unless(path: ['/login']));
      app.use(passport.initialize());
      app.use(passport.session());
    
  
;

服务/passport.js

/* other code */
passport.serializeUser(function(user, done) 
  console.log(user);
  done(null, user.id);
);

passport.deserializeUser(function(id, done) 
  console.log(id);
  findById(id, function(err, user) 
    if (err)
      done(err);
    else if (!user) 
      done(null, false);
    
    else
      done(null, user);
  );
);

AuthController.js

module.exports = 

  login: function(req, res) 
    passport.authenticate('local', function(err, info, user) 
      if (err) 
        return res.send(err);
      
      else if (!user) 
        return res.send(info);
      
      else 
        var token = jwt.sign(user, sails.config.session.secret, 
          expiresInMinutes: 5 // expires in 5 minutes
        );
        res.json(
          success: true,
          message: 'Enjoy your token!',
          token: token
        );
      
    )(req, res);
  ,

  me: function(req, res) 
    res.send(req.user);
  

为什么我的 desesializedUser 函数从未被调用?我的代码有什么问题?

【问题讨论】:

【参考方案1】:

你配置护照的策略吗?

护照doc中提到了以下内容。

在验证请求之前,必须配置应用程序使用的策略。

【讨论】:

以上是关于护照反序列化用户未在帆中调用的主要内容,如果未能解决你的问题,请参考以下文章

当护照js中的序列化和反序列化调用时

关于护照序列化/反序列化用户中的回调函数的困惑

TypeError:User.findById 不是反序列化用户的函数

Passport js 序列化用户和反序列化用户

passport.deserializeUser 从不调用

nodejs护照身份验证令牌