当前位置: 首页 > 知识库问答 >
问题:

passport和mongoose的bcrypt错误

韶云瀚
2023-03-14

Bcrypt抛出参数不正确错误,我在user.js中追溯到该函数

userSchema.methods.comparePassword = (candidatePassword, callback) => {
  bcrypt.compare(candidatePassword, this, (err, isMatch) => {
    console.log('candidatePassword= ', candidatePassword, '&  this= ', this);
    if (err) { return callback(err); }
    callback(null, isMatch);
  });
};

   /* 
     candidatePassword=  bird
     this=  {}
     this.password=  undefined */

用户对象作为空对象返回,因此this.password未定义。我假设bcrypt.compare中的this参数引用了userschema实例。userSchema在passport.js中声明

const passport = require('passport');
const ExtractJwt = require('passport-jwt').ExtractJwt;
const JwtStrategy = require('passport-jwt').Strategy;
const LocalStrategy = require('passport-local').Strategy;

const User = require('../models/user');
const config = require('../config');

var localOptions = {
  usernameField: 'email',
};

// Verifies user by checking if a password matches the specified email during signin
var localStrategy = new LocalStrategy(localOptions, function (email, password, done) {
  User.findOne({ email:email.toLowerCase()}, function (err, user) {
    console.log('/passport.js/localStrategy- user object: ', user)
    if (err) { return done(err); }
    if (!user) { return done(null, false); }
    user.comparePassword(password, function (err, isMatch) {
      console.log('/passport.js/localStrategy- password: ', password)
      if (err) { return done(err); }
      if (!isMatch) { return done(err, false); }
      return done(null, user);
    });
  });
}); 

// ... jwt strategy ...

passport.use(localStrategy);

/* 
  user object:  { _id: 58a1018dc3f89eb5955b8638,
  email: 'bird@bird.com',
  password: '$2a$10$lAJ9hoGKt9ggfk1TISfkOedxDIs/waLB5e4PccHAKt286XCKCY0/q',
  __v: 0 } */

我不是很清楚这是什么问题,因为从mongodb返回的user对象带有加密的密码字段,而user.comparepassword()被调用...

我也用相同的模式对象注册用户。

感谢任何帮助/提示!

共有1个答案

房光临
2023-03-14

您只是设置了模型,使其能够拉入candidatePassword,但从未从数据库中找到存储的密码。由于返回的是一个空对象,可能是电子邮件不匹配,也可能是密码没有与存储的内容进行比较。尝试简化comparePassword函数并将“sync”添加到bcrypt.compare,这样就不需要回调了。

在模型中:

userSchema.methods.comparePassword = (candidatePassword) => {
    return bcrypt.compareSync(candidatePassword, this.password);
};
 类似资料:
  • Koa 2 + Passport + Mongoose + GraphQL Notice You want build a more flexible GraphQL schema, consider using this boilerplate instead: https://github.com/sibelius/graphql-dataloader-boilerplate graffiti

  • Node boilerplate This is my node boilerplate starter kit. I will continue to update with the latest tech to help make make node servicessuper easy and efficient to kick start. Whats out the box? Frame

  • 本文向大家介绍使用mongoose和bcrypt实现用户密码加密的示例,包括了使用mongoose和bcrypt实现用户密码加密的示例的使用技巧和注意事项,需要的朋友参考一下 前面的话 最近在做的个人项目中,需要对密码进行加密保存,对该操作的详细步骤记录如下 介绍 关于mongoose已经写过博客就不再赘述,下面主要介绍bcrypt bcrypt是一个由两个外国人根据Blowfish加密算法所设计

  • Bcrypt 是一个跨平台的文件加密工具。

  • 问题内容: 我研究了如何通过此堆栈交换在节点中进行错误处理,但是我不确定身份验证失败时护照在做什么。我有以下LocalStrategy: 在看到“错误>某些错误”控制台打印输出后,什么都没有发生。我认为它应该在带有错误参数的下一条路径上继续,但似乎没有这样做。这是怎么回事? 问题答案: 策略实施与验证请求和处理成功/失败一起使用。 假设您正在使用此路由(向其传递了电子邮件地址和密码): 这将调用该

  • 问题内容: 我正在尝试使用Windows 7 Ultimate x64 安装bycrpt 。这是我的安装日志: 我已经安装了Python <v2.7和.NET Framework SDK 2.0。我还下载了一个名为win7sdkx64.exe的程序包,我认为这是Visual Studio的sdk。我喜欢我的所有依赖项,如下所示: 但我仍然遇到这些错误。我接下来可以尝试什么?完全安装Visual S