护照不会返回用户名和密码以外的其他字段

时间:2019-08-21 14:41:07

标签: mongoose passport-local

在我的设置中,对路由进行了编程,以在成功通过身份验证后打印Passport返回的所有数据:

// routes/auth-providers/local.js

import express from 'express';
import passport from 'passport';
import jwt from 'jsonwebtoken';
import dotenv from 'dotenv';
import passportSetup from '../../passport-setup';

dotenv.config();

const router = express.Router();
router.post('/',
  passport.authenticate('local', { failureRedirect: '/' }),
  (req, res) => {
    const {username, firstName, lastName} = req.body;
    console.log('req.body', req.body);
    res.json({ success: true });
  }
);

我的本​​地策略配置如下:

// passport-setup/strategies/local.js

const local = new LocalStrategy (
  (username, password, done) => {
    User.findOne({ username: username }, (err, user) => {
      if(err) { return done(err); }
      if (!user) { return done(null, false); }
      // if (!user.verifyPassword(password)) { return done(null, false); }
      console.log('USER', user);
      return done(null, user);
    });
  }
);

在两个console.log()语句中,只有第二个给出完整的用户文档,包括firstName,lastName等。但是,我的路由中的第一个(console.log('req.body', req.body);)仅给出用户名和密码。我什至可以看到用户文档正在序列化:

// passport-setup/index.js

passport.serializeUser((user, done) => {
  console.log('SERIALIZE', user);
  done(null, user.id);
});

我可能做错了什么?

P.S .:回购位于https://github.com/amitschandillia/proost/tree/master/web供参考。

1 个答案:

答案 0 :(得分:2)

我对passport.js还是陌生的,但是在文档here中,它提到:

  

如果身份验证成功,则将调用下一个处理程序,并将req.user属性设置为已身份验证的用户

所以也许您需要做的就是将req.body更改为req.user

const {username, firstName, lastName} = req.user;
相关问题