nodejs - passport.use 回调返回 dataValues 和 _previousDataValues 而不是普通对象

Posted

技术标签:

【中文标题】nodejs - passport.use 回调返回 dataValues 和 _previousDataValues 而不是普通对象【英文标题】:nodejs - passport.use callback return dataValues and _previousDataValues instead of a normal object 【发布时间】: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);
      );

));

;

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于nodejs - passport.use 回调返回 dataValues 和 _previousDataValues 而不是普通对象的主要内容,如果未能解决你的问题,请参考以下文章

在 Passport 策略回调中获取请求对象

NodeJS Passport按路由配置,作为中间件添加并且没有错误但它不起作用/触发

LocalStrategy Passport 返回 null

LocalStrategy Passport 返回 null

对passport.use(strategy) done 功能及其与passport.authenticate 的关系感到困惑

Passportjs 成功回调从未被调用