密码值返回未定义,但是使用console.log显示时,用户可以看到

Posted

技术标签:

【中文标题】密码值返回未定义,但是使用console.log显示时,用户可以看到【英文标题】:Password value returns undefined, but when console.log is used to display it, the user can see it 【发布时间】:2020-02-06 20:21:09 【问题描述】:

所以我使用 passport.js 作为基本的本地登录策略。

下面的代码是我正在使用的

passport.use(new LocalStrategy(
    usernameField: 'email',
    passwordField: 'password'
  ,
  function(username, password, cb) 
    'use strict';    
    UserModel.findOne(
      email: username
    ).populate('organisation').exec(function(err, user) 
      if (err) 
        return cb(err);
      

      console.log( user );

      if (!user) 
        return cb(null, false, 
          message: 'Incorrect email.'
        );
      

      console.log( user );
      console.log( user.password );

      if (!bcrypt.compareSync(password, user.password) /* true */ ) 
        console.log('password incorrect');
        return cb(null, false, 
          message: 'Incorrect passowrd.'
        );
      

      return cb(null, user);
    );
  ));

现在console.log(user) 显示以下内容(已编辑以保存信息)

 _id: 5d9c8c4ac50eb00cf494bf8d,
  date: 2019-10-08T13:16:58.037Z,
  forename: 'forename',
  surname: 'surname',
  email: 'test@example.com',
  password:
   '$2a$10$ZUtnlBtXsnvw5k517LRYhORPwG.U.2TzCsIwpzM46jLPpMX4iFf4K',
  organisation: null,
  __v: 0 

但是console.log( user.password ) 返回未定义,我真的很困惑为什么!

【问题讨论】:

可能是getter被修改了? 你能做typeof(user)吗 @Sudhakar typeof user 返回对象 可以访问其他字段吗? @Sudhakar 不,我刚刚尝试过console.log( user.email ),它也返回 undefined 但该对象仍作为原始帖子输出。 【参考方案1】:

Mongoose/MongoDB result fields appear undefined in javascript

发现上述工作user.toObject();

但是我最初不必这样做,它只是工作,所以不确定发生了什么。

我现在必须致电toObject() 有什么具体原因可以帮助指出吗?

【讨论】:

以上是关于密码值返回未定义,但是使用console.log显示时,用户可以看到的主要内容,如果未能解决你的问题,请参考以下文章

JS基础 严格模式

ReactJS event.target.value 返回未定义

req.user 是未定义的,即使它能够 console.log 用户

数组中的字符串仅在尝试获取单个值时返回未定义?

为啥 array[array.length] 返回未定义? [复制]

Jest.fn-使用jest.mock时返回的值返回未定义