javascript - 将密码散列到对象中并接收 Promise { <pending> }

标签 javascript bcrypt

我正在学习散列字符串密码并将它们存储在对象列表中。

const bcrypt = require('bcrypt')

var users = []

async function hashPass(pass)
{
    try {
        const salt = await bcrypt.genSalt(10)
        
        console.log(`Hashing Password: ${pass}`)

        const hashedPass = await bcrypt.hash(pass, salt)

        console.log(`Hashed Password: ${hashedPass}`)

        return hashedPass

    } catch (error) {
        console.log(error)
    }
}

const password = hashPass('pass')

users.push({
    'ID': 0,
    'Name': 'Ali',
    'Email': 'alihaisul<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1c3271795c7b717d7570327f7371" rel="noreferrer noopener nofollow">[email protected]</a>',
    'Password': password
})

console.log(users)

输出:

[
  {
    ID: 0,
    Name: 'Ali',
    Email: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b2d3dedbdad3dbc1c7de9cdfd7f2d5dfd3dbde9cd1dddf" rel="noreferrer noopener nofollow">[email protected]</a>',
    Password: Promise { <pending> }
  }
]
Hashing Password: pass
Hashed Password: $2b$10$r52Lu1K.WxOEcAdyeMBV4eR3EPGRXsgJjktJMXFGY5F7a.Q6yoH1C

我不断在输出中收到“Promise {pending}”。我研究并尝试使用 async、await、甚至“then()”。我在这里缺少什么?

最佳答案

由于 hashPass 函数使用 async/await 关键字,它会返回一个 Promise 对象,并且您将其作为输出。

在将新用户对象推送到users数组之前,您需要等待hashPass函数的结果。您可以通过以下方式修改代码来实现此目的:

const bcrypt = require('bcrypt');
var users = [];

async function hashPass(pass) {
  try {
    const salt = await bcrypt.genSalt(10);        
    console.log(`Hashing Password: ${pass}`);
    const hashedPass = await bcrypt.hash(pass, salt);
    console.log(`Hashed Password: ${hashedPass}`);

    return hashedPass;
  } catch (error) {
    console.log(error);
  }
}

async function createUser() {
  const password = await hashPass('pass');

  users.push({
    'ID': 0,
    'Name': 'Ali',
    'Email': '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0c6d6065646d657f79602261694c6b616d6560226f6361" rel="noreferrer noopener nofollow">[email protected]</a>',
    'Password': password
  });

  console.log(users);
}


createUser();

关于javascript - 将密码散列到对象中并接收 Promise { <pending> },我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76192369/

相关文章:

javascript - 早午餐/早餐 : Uncaught Error: Cannot find module 'frontend/js/components/Hello' from 'frontend/js/app.js'

go - 使用 KDF 在 Go 中使用 bcrypt 获取特定的输出 key 长度

java - 如何使用 jBcrypt 检查 bcrypt 密码? (将存储从 Parse.com 移至 Firebase)

java - 如何在Spring Security中的自定义PasswordEncoder中获取用户名?

java - 验证抛出 java.security.InvalidKeyException : null

javascript - 通过 ajax JSON 获取未定义

javascript - Ajax在多个实例中的下拉效果

javascript - Rxjs 将 subject 与 refCount 结合使用

javascript - 使 div 带有动画飞到另一个 DOM 位置

node.js - Windows 上的 node-gyp 出现问题 : configure error