【问题标题】:nodejs - passport.use callback return dataValues and _previousDataValues instead of a normal objectnodejs - passport.use 回调返回 dataValues 和 _previousDataValues 而不是普通对象
【发布时间】:2021-08-04 07:09:27
【问题描述】:

我正在使用passport.js 模块进行身份验证并使用 Sequelize mysql 进行数据库管理。

验证用户时出错:

{
    "errors": {
        "message": "WHERE parameter \"id\" has invalid \"undefined\" value",
        "error": {}
    }
}

验证用户时,文件passport.js 中的console.log(jwtPayload) 显示以下结果。

{
  dataValues: {
    id: '06c19eb0-995f-45f4-81d7-26ec3b401234',
    email: 'CCCC@gmail.com',
    createdAt: '2021-05-14T01:51:31.000Z',
    updatedAt: '2021-05-14T01:51:31.000Z'
  },
  _previousDataValues: {
    id: '06c19eb0-995f-45f4-81d7-26ec3b401234',
    email: 'CCCC@gmail.com',
    createdAt: '2021-05-14T01:51:31.000Z',
    updatedAt: '2021-05-14T01:51:31.000Z'
  },
  _changed: {},
  _options: {
    isNewRecord: false,
    _schema: null,
    _schemaDelimiter: '',
    raw: true,
    attributes: [ 'id', 'email', 'createdAt', 'updatedAt' ]
  },
  isNewRecord: false,
  iat: 1620961695
}

而不是

  {
    id: '06c19eb0-995f-45f4-81d7-26ec3b401234',
    email: 'CCCC@gmail.com',
    createdAt: '2021-05-14T01:51:31.000Z',
    updatedAt: '2021-05-14T01:51:31.000Z'
  }

passport.js

var passport = require('passport');
const passportJWT = require("passport-jwt");
const JWTStrategy   = passportJWT.Strategy;
var LocalStrategy = require('passport-local').Strategy;
const ExtractJWT = passportJWT.ExtractJwt;

const bcrypt = require('bcryptjs');

var User = require('../models/Users')

module.exports = function(passport) {


passport.use(new JWTStrategy({
  jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
  secretOrKey   : 'your_jwt_secret'
},
function (jwtPayload, done) {
  console.log(jwtPayload)
  return User.findOne({where: {id:jwtPayload.id}})
      .then(user => {
          return done(null, user);
      })
      .catch(err => {
          return done(err);
      });
}
));

};

【问题讨论】:

    标签: mysql node.js express sequelize.js passport.js


    【解决方案1】:

    Sequelize 按设计返回dataValues_previousDataValues 属性。您只需稍作修改即可传递当前值。

    return User.findOne({where: {id:jwtPayload.id}})
          .then(user => {
              return done(null, user.dataValues);
          })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 2019-03-01
      • 2016-11-16
      • 2014-05-02
      • 1970-01-01
      相关资源
      最近更新 更多