首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Bcrypt.compare()只返回false,在Promise下使用

Bcrypt.compare()是一个用于比较密码哈希值的函数,它用于验证用户输入的密码是否与存储在数据库中的哈希密码匹配。当Bcrypt.compare()只返回false时,可能是以下几个原因:

  1. 密码不匹配:Bcrypt.compare()会将用户输入的密码与存储在数据库中的哈希密码进行比较。如果两者不匹配,函数将返回false。这可能是因为用户输入的密码错误或者数据库中的哈希密码被篡改。
  2. 异步操作未正确处理:Bcrypt.compare()函数通常是异步操作,它返回一个Promise对象。在使用Promise时,需要确保正确处理异步操作的结果。如果没有正确处理Promise的返回值,可能会导致只返回false的情况。

为了解决这个问题,可以采取以下步骤:

  1. 检查密码输入:首先,确保用户输入的密码是正确的。可以通过打印或调试来验证用户输入的密码是否与预期相符。
  2. 确保正确处理Promise:在使用Bcrypt.compare()时,确保正确处理Promise的返回值。可以使用async/await或.then()/.catch()等方式来处理异步操作的结果。

下面是一个示例代码片段,展示了如何正确使用Bcrypt.compare()函数并处理Promise的返回值:

代码语言:javascript
复制
const bcrypt = require('bcrypt');

async function comparePasswords(inputPassword, hashedPassword) {
  try {
    const match = await bcrypt.compare(inputPassword, hashedPassword);
    if (match) {
      console.log('密码匹配');
    } else {
      console.log('密码不匹配');
    }
  } catch (error) {
    console.error('比较密码时出错:', error);
  }
}

// 调用函数进行密码比较
comparePasswords('userPassword', 'hashedPassword');

在上述示例中,我们使用了async/await来处理异步操作,并使用try/catch来捕获可能的错误。如果Bcrypt.compare()返回true,表示密码匹配;如果返回false,表示密码不匹配。

对于腾讯云相关产品,可以使用腾讯云的云服务器(CVM)来部署应用程序,并使用腾讯云的云数据库MySQL(CDB)来存储用户的密码哈希值。您可以通过以下链接了解更多关于腾讯云产品的信息:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 大白话讲解Promise(一)一文 的学习+新领悟

    (function(){});     return window.newP }) thenP===newP  //显示是false,表明内部会对then的参数函数的返回值进行包装。...----2016.12.14更正一:catch捕获then中的异常,且cache的参数函数被传入的reason是一个Error对象。  ...不知道我原来是怎么测试的,我当时可能是Promise的构造函数中写的异常,就以为原作者写的不对!...5、Promise.race([ 多个Promise对象 ]).then(function( firstResult){});  返回第1个异步回来的结果。这个原来没注意到过。...2016.12.6 补充: 一般情况我们会使用 new Promise 来创建prmise对象,除此之外我们也可以使用 Promise.reslove 和 Promise.reject 来直接创建,例如

    70420

    干货 | 小程序多页面接口数据缓存

    这次刚好在小程序里用到了,就顺便做记录。 在这里,我们假设需要全局拉取一个用户信息。涉及异步请求中,我们常用的方式是封装成一个Promise: 方法统一对外返回一个Promise。...加锁,在请求中不再请求,返回缓存的Promise。 若已有缓存,则返回一个马上resolve的Promise。...我们一个生命周期中都会请求一次,其他都只会在缓存中获取。...使用上节《小程序的登录与静默续期》封装的request方法来发起请求。...在这里,为了保证小程序不乱用任意域名的服务,wx.request请求的域名需要在小程序管理平台进行配置,如果小程序正式版使用wx.request请求未配置的域名,控制台会有相应的报错。

    1.1K40

    前端异步代码解决方案实践(二)

    /A+ 简译为 onFulfilled 或 onRejected 执行环境堆栈仅包含平台代码时才可被调用。...正确答案是: promise1,promise2,setTimeout。 进一步实现 Promise 对象之前,简单模拟异步执行函数供后文 Promise回调使用(也可采用 asap库等)。...迭代器 了解生成器函数前,有必要先认识迭代器。迭代器是一种特殊对象,具有专门为迭代流程设计的 next() 方法。每次调用 next() 都会返回一个包含 value 和 done 属性的对象。...注意,yield 关键字可在生成器内部使用,在其他地方使用会导致语法错误。即使在生成器内部函数中使用也是如此。...不同于 Promise 对象引入 ployfill 垫片就可以运行,Generator 函数是新增的语法结构,仅仅依靠添加运行时代码是无法低版本运行的。

    3.3K60

    JavaScript Promise

    简单介绍一 Promise 以及他的使用、异常处理、同步处理等等… 介绍   我们都知道 JavaScript 是一种同步编程语言,上一行出错就会影响下一行的执行,但是我们需要数据的时候总不能每次都等上一行执行完成...Promise.all() 方法接收一个 Promise 的 iterable 类型(Array,Map,Set都属于 ES6 的 iterable 类型)的输入,并且返回一个 Promise 实例...那么我们看一使用 Promise.all 和不使用的区别。...ms 123 456 789 使用Promise.all: 3006.345947265625 ms /* ---打印结果--- */ 我们可以看到,不使用 all 的情况我们需要等待的时间会长很多...我们每次改变单个 Promise (单一原则)。 我们可以一个 Promise 中添加多个处理程序。 Promise 对象中所有方法的返回类型,无论是静态方法还是原型方法,都是 Promise

    23910

    深入理解ES6--迭代器、生成器、代理、反射、Promise

    不能使用箭头函数来创建生成器;ES6函数的简写方式可以(只需函数名前加星号) 可迭代对象具有Symbol.iterator属性,ES6中,所有的集合对象(数组、Set集合和Map集合)和字符串都是可迭代对象...,其值为集合的值; keys() 返回一个迭代器,其值为集合中的所有键名 注意:数组和Set集合的默认迭代器是values();Map集合的默认迭代器是entries() // Map集合可以使用解构...Promise相关的知识 Promise ES6—Promise Promise—API Promise使用场景 并行执行两个异步操作,当两个操作都结束时通知你;或者同时进行两个异步操作,取优先完成的操作结果...在这些情况Promise是更好的选择! Promise执行 Promise的执行器会立即执行,然后才执行后续流程中的代码。...return p2 }).then(val => console.log(val)) .catch(err => console.error(err)) // 输出42、error 捕获错误 Promise

    43431

    2022秋招前端面试题(八)(附答案)

    (5)暂时性死区: 使用let、const命令声明变量之前,该变量都是不可用的。这在语法上,称为暂时性死区。使用var声明的变量不存在暂时性死区。...两个条件都成立,所以会执行条件中的代码, f 定义是没有使用var,所以他是一个全局变量。因此,这里会通过闭包访问到外部的变量 f, 重新赋值,现在执行 f 函数返回值已经成为 false 了。...cookie数据还有路径(path)的概念,可以限制cookie属于某个路径 sessionStorage和localStorage不会自动把数据发送给服务器,仅在本地保存。...宽屏及高分辨率的自适应页面,如果背景不够宽,很容易出现背景断裂;CSSSprites开发的时候相对来说有点麻烦,需要借助photoshop或其他工具来对每个背景单元测量其准确的位置。...viewport针对于移动端,移动端上才能看到效果display:inline-block 什么时候会显示间隙?

    54620

    ES6中的Promise和Generator详解

    简介 ES6中除了上篇文章讲过的语法新特性和一些新的API之外,还有两个非常重要的新特性就是Promise和Generator,今天我们将会详细讲解一这两个新特性。...} { value: 1, done: false } { value: 0, done: false } 可以看到最后的一步,我们使用next传入的true替代了i的值,最后导致i= -1 + 1...: false } { value: 42, done: true } 如果next不传值的话,yield本身是没有返回值的,所以我们会得到NaN。...要记住yield本身是没有返回值的。 我们需要调用generator的next方法,将异步执行的结果传进去。这就是我们request方法中做的事情。...); }).then(function(data){ console.log(data); }) Thunk函数和异步函数自动执行 讲Thunk函数之前,我们讲一函数的调用有两种方式,一种是传值调用

    1.2K21

    ES7、ES8、ES9、ES10、ES11、ES12新特性大全!

    : 如果包含返回true,否则返回false。...如果这个数值小于当前字符串的长度,则返回当前字符串本身。 padString(可选):填充字符串。如果字符串太长,使填充后的字符串长度超过了目标长度,则保留最左侧的部分,其他部分会被截断。...如果这个数值小于当前字符串的长度,则返回当前字符串本身。 padString(可选):填充字符串。如果字符串太长,使填充后的字符串长度超过了目标长度,则保留最左侧的部分,其他部分会被截断。...可以通过 window、self 取到全局对象, node.js 中,必须使用 global。...松散模式,可以函数中返回 this 来获取全局对象,但是严格模式和模块环境,this 会返回 undefined。

    26110

    Promise源码指南

    Promise是将异步任务转换为同步任务的一个构造函数,通过resolve,reject改变任务的状态,必不可少的then方法用来收Promise的值,这些都是Promise的基本使用。..._noop = noop; 当使用new操作符实例化Promise的时候,必须传入Promise的构造函数fn,否则将抛出错误 然后初始化实例的状态和值 最后调用doResolve方法 下面我们一起来看一...对象」,_deferredState的值是随着then调用的次数决定的,为什么说只有同一个Promise对象才会触发呢,我们来看下面一个小例子 const promise2 = new Promise..._deferredState === 1){}‘的这个判断里面去执行 到这里小伙伴们又会说,不对啊,我这个不是同一个Promise对象吗,我不是实例化了一次吗?...这里使用Promise的时候确实是实例化了一次,但是每次调用then方法返回Promise跟实例的Promise并不是同一个引用,也就是说,这里的self并不是实例出来的对象,后面会详细介绍then

    66010

    Pytest系列(30)- 使用 pytest-xdist 分布式插件,如何保证 scope=session 的 fixture 多进程运行情况仍然能运行一次

    将常用功能放到 fixture,可以提高复用性和维护性 做接口自动化测试的时候,通常我们会将登录接口放到 fixture 里面,并且 scope 会设置为 session,让他全局运行一次 但是当使用...,这意味着不同的测试过程中,要求高级范围的 fixture(如:session)将会被多次执行,这超出了预期,某些情况可能是不希望的 尽管 pytest-xdist 没有内置支持来确保 scope...scope=session 的 fixture 很明显执行了三次,三个进程的三个测试用例得到的数据不一样,明显不会是我们想要的结果 使用官方解决方法的栗子rt #!...print("fixture:请求登录接口,获取token", token) os.environ['token'] = token # 如果测试用例有需要,可以返回对应的数据...可以看到 fixture 执行了一次,不同进程的测试用例共享一个数据 token 重点 读取缓存文件并不是每个测试用例都会读,它是按照进程来读取的 比如 指定三个进程运行,那么有一个进程会执行一次

    1.6K20

    【TypeScript 演化史 — 第四章】更多的字面量类型 与 内置类型声明

    } const httpPort = getPort("http"); // Type 80 const httpsPort = getPort("https"); // Type 443 现在,当返回的时候与比较的值永远都不会相同的情况...在这种情况,TypeScript 编译器可以帮助咱们检测错误的逻辑和无效的代码。 枚举字面量类型 最后,咱们还可以使用枚举作为字面量类型。...现在希望项目中使用ES6 中原生的 Pormise。...这些 ES5 中并没有,所以咱们需要安装一个 polyfill 来让我们的代码旧的浏览器中运行: npm install --save es6-promise 然后可以入口文件中导入对应的库 import..."es6-promise"; 有了这个 polyfill,现在就可以应用程序中使用 Promise,代码也可以正常运行。

    1.2K30

    ES6读书笔记(三)

    到了那个时候,Promise 的运行已经结束了,所以这个错误是 Promise 函数体外抛出的,会冒泡到最外层,成了未捕获的错误,相当于是js引擎去执行了这个回调,而不是promise内部执行。...参数中谁率先改变了状态,就返回谁的状态,这意味着返回一个结果 11.Promise.resolve() ①Promise.resolve方法允许调用时不带参数,直接返回一个resolved状态的 Promise...Generator.prototype.throw() Generator 函数返回的遍历器对象,都有一个throw方法,可以函数体外抛出错误,然后 Generator 函数体内捕获: var g... JavaScript 语言中,Thunk 函数替换的不是表达式,而是多参数函数,将其替换成一个接受回调函数作为参数的单参数函数,类似柯里化: // 正常版本的readFile(多参数版本) fs.readFile...异步遍历器:asyncIterator,部署Symbol.asyncIterator属性上面,最大的语法特点就是调用遍历器的next方法,返回的是一个 Promise 对象。

    1.1K20

    uni-app使用uniCloud时做类似于拦截器和请求结果再处理(类似于请求和响应拦截)

    想要在使用uniCloud的使用拦截请求怎么办 再次封装uniCloud.callFunction 特别说明 这里的token是我自己存储成token 如果你使用了uni-id 官方的推荐是...uni_id_token’) (‘uni_id_token_expired’) 存储了uni_id_token后请求会自动携带 这里的res.result.code==0是因为我的云函数请求成功返回的...code均为0 如果你的不是 就根据自己需求更改 正常情况 我们使用uniCloud.callFunction uniCloud.callFunction({ name: 'xxx' }) 结合...中 需要调用的地方 登陆注册 整个文件 通用请求 当请求为0(根据需求调整)的时候请求成功 否则返回相应的code(也可以返回msg等) 封装 const req = (funName,params...$mount() 需要调用的地方 test() { this.

    1.6K10

    掌握现代JavaScript:ES7到ES12的新特性全解析!

    如果这个数值小于当前字符串的长度,则返回当前字符串本身。padString(可选):填充字符串。如果字符串太长,使填充后的字符串长度超过了目标长度,则保留最左侧的部分,其他部分会被截断。...); // {done: true}} test();1.4 可以使用 for-await-of 循环中异步调用函数const promises = [ new Promise((resolve)...1 // NaN false || 'bar' // 'bar'false ?? 'bar' // false1.3 注意不可以将 ?? 与 AND(&&)OR(||)一起使用,会报错。...window、self 取到全局对象, node.js 中,必须使用 global。...松散模式,可以函数中返回 this 来获取全局对象,但是严格模式和模块环境,this 会返回 undefined。

    53930

    【TypeScript 演化史 -- 4】更多的字面量类型 与 内置类型声明

    } const httpPort = getPort("http"); // Type 80 const httpsPort = getPort("https"); // Type 443 现在,当返回的时候与比较的值永远都不会相同的情况...在这种情况,TypeScript 编译器可以帮助咱们检测错误的逻辑和无效的代码。 枚举字面量类型 最后,咱们还可以使用枚举作为字面量类型。...现在希望项目中使用ES6 中原生的 Pormise。...这些 ES5 中并没有,所以咱们需要安装一个 polyfill 来让我们的代码旧的浏览器中运行: npm install --save es6-promise 然后可以入口文件中导入对应的库 import..."es6-promise"; 有了这个 polyfill,现在就可以应用程序中使用 Promise,代码也可以正常运行。

    1.1K20

    vue源码中的nextTick是怎样实现的

    == 'undefined'),判断参数 cb 不存在且浏览器支持 Promise,则返回一个 Promise 类实例化对象。...来看一 timerFunc 函数的定义,先看用 Promise 创建一个异步执行的 ztimerFunc 函数 。 var timerFunc; if (typeof Promise !...执行 _resolve(ctx),因为nextTick 函数中如何参数 cb 没有值,会返回一个 Promise 类实例化对象,那么执行 _resolve(ctx),就会执行 then 的逻辑中。...因为各浏览器对创建异步执行函数的方法各不相同,要做兼容处理,下面来介绍一各种方法。 1、Promise 创建异步执行函数 if (typeof Promise !...但是过不久,实现 timerFunc 的顺序又改为 Promise,MutationObserver,setImmediate,setTimeout,在任何地方都使用宏任务会产生一些很奇妙的问题,其中代表

    60410
    领券