最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

passport.js不会在登录注册时填充数据

网站源码admin18浏览0评论

passport.js不会在登录/注册时填充数据

passport.js不会在登录/注册时填充数据

版本:

  • “护照”:“ 0.4.1”,
  • “本地护照”:“ 1.0.0”,
  • “ passport-local-mongoose”:“ 6.0.1”
  • “ express”:“ 4.17.1”,
  • “ express-session”:“ 1.17.1”,

我的会话中间件

let sessionMiddleware = session({
    store: sessionStore,
    secret: process.env.SECRET,
    resave: false,
    saveUninitialized: false,
    cookie: {
        secure: false,
        httpOnly: true
    }
});

对于serializeUser / deserializeUser,我正在使用我的自定义回调:

passport.serializeUser((user, done) => {
    db.User.findById(user._id)
        .populate('role', ['code'])
        .exec((err, data) => {
            if (err) { 
                console.info('\n Error:', err);
            } else {
                console.info(11, data);
                done(null, data);
            }
        })
});
passport.deserializeUser((user, done) => {
    db.User.findById(user._id)
        .populate('role', ['code'])
        .exec((err, data) => {
            if (err) { 
                console.info('\n Error:', err);
            } else {
                done(null, data);
            }
        })
});

它可以处理任何请求,并且我可以很好地获得用户角色。但这对登录无效:

// User object from passport.authenticate callback
{
  _id: 5eb8596e049f2131487725eb,
  email: '[email protected]',
  login: 'test',
  role: 5eb855dc91fd0548fc968939,
  salt: /* MY SALT */,
  hash: /* MY PASSWORD HASH */,
  createdAt: 2020-05-10T19:43:42.797Z,
  updatedAt: 2020-05-10T19:43:42.797Z,
  __v: 0
}

但是serializeUser确实起作用,并且在身份验证之后被调用,返回带有正确角色对象的User对象:

// user object on serialize-deserialize User, i.e. on any request other than login/signup
{
  _id: 5eb8596e049f2131487725eb,
  email: '[email protected]',
  login: 'test',
  role: { _id: 5eb855dc91fd0548fc968939, code: 'tech_sup' },
  createdAt: 2020-05-10T19:43:42.797Z,
  updatedAt: 2020-05-10T19:43:42.797Z,
  __v: 0
}

问题是,在通行证之后填充。因此,它没有更新req.user。

如何使护照在登录/注册时用猫鼬填充数据?

回答如下:

如果有人正在为同一问题而苦苦挣扎:

我也在使用passport-local-mongoose,我想在其他任何商店都需要相同的东西:

1)确保您的password.serializeUser接受默认处理程序(在我的情况下为db.User.serializeUser())2)在将护照本机猫鼬用于用户架构的地方,添加下一个选项-findByUserName:

User.plugin(passportMongoose, {
    /** any other options you use for passport-local-mongoose plugin */
    [...pluginOptions]
    /** added option to solve the problem */
    findByUsername: (model, queryParameters) => model.findOne(queryParameters).populate('role', ['code']),
});
发布评论

评论列表(0)

  1. 暂无评论