【问题标题】:Please help me get the hashed password请帮我获取哈希密码
【发布时间】:2019-05-22 15:48:55
【问题描述】:

我正在尝试获取管理员的哈希密码。

我尝试对密码进行哈希处理,但未能将其插入到用户对象中。

import encryptor from '../helpers/password';

let hashed_pswd = 'john123';
const hashPassword= async () => {
    const adminPwd = await encryptor.encryptPassword(hashed_pswd, 10);
    console.log(adminPwd);
}
hashPassword();

export default [
    {
        id: 1,
        first_name: 'john',
        last_name: 'doe',
        email: 'john@gmail.com',
        password: adminPwd,
        address: 'kigali',
        is_admin: true
    }
]

我能够在控制台中记录散列密码,但是当我尝试发送 POST 请求时,我发现 adminPwd 没有定义。

提前谢谢你。

【问题讨论】:

  • 我不是 Javascript 人,但我猜测 adminPwd 的范围是 hashPassword 函数。我希望您从该方法返回散列密码。 (我还会更改 hashed_pswd 变量的名称,因为它是 not 散列的 - 这是纯文本。)
  • 嗨,John,即使我返回 adminPwd,我也会遇到同样的错误。当我注释掉密码时,我真的能够在控制台中返回一个散列字符串:对象内部的 adminPwd。
  • 我认为另一个问题是 hashPassword() 是异步的,但您并没有等待它。因此,它甚至在函数完成之前就尝试填充该值。同样在里面你调用了一个名为 encryptPassword 的方法......你意识到散列和加密不是一回事??

标签: javascript node.js express


【解决方案1】:

由于您将async/await 用于hashPassword 函数,因此您不妨将整个代码打包并删除该函数。您应该将您的 hashed_pswd 变量重命名为更有意义的名称,因为它在那个阶段没有被散列。我称它为password

import encryptor from '../helpers/password';

export default async () => {

  const password = 'john123';
  const hashedPassword = await encryptor.encryptPassword(password, 10);

  return [{
    id: 1,
    first_name: 'john',
    last_name: 'doe',
    email: 'john@gmail.com',
    password: hashedPassword,
    address: 'kigali',
    is_admin: true
  }];

};

对于import 那个模块,你必须使用async 来包装你的代码,因为你在getUserData 中从async 返回一个承诺。

import getUserData from './getUserData.mjs';

(async () => {

  console.log(await getUserData());

})();

【讨论】:

  • 问题是当我尝试在函数内移动数组时,我得到这个错误:``` 'export' or 'import' may be at the top level ```。跨度>
  • 是的,我害怕那个。让我努力吧。它可能还可以挽救。
  • @Mo1,我不知道这个编辑是否有帮助,但如果有帮助,请告诉我。我已经测试过了,它可以工作,但它可能不适合你。
【解决方案2】:

为了解决这个问题,您需要声明 adminPwd 使用 let 而不是 const全局范围内或在您的导出默认部分可以访问的范围内

Refer to modified code snippet:

import encryptor from '../helpers/password';

let hashed_pswd = 'john123';
let adminPwd;
const hashPassword = async () => {
    adminPwd = await encryptor.encryptPassword(hashed_pswd, 10);
            console.log(adminPwd);
            return [
                {
                    id: 1,
                    first_name: 'john',
                    last_name: 'doe',
                    email: 'john@gmail.com',
                    password: adminPwd,
                    address: 'kigali',
                    is_admin: true
                }
            ]
}

export default hashPassword;

无论你在哪里导入这个,在使用它之前调用导出的函数。

In order to Consume this response you have two options:

  1. 在异步函数中使用 await 关键字

  2. 如果不在异步函数中使用,请使用 .then 方法。

【讨论】:

  • 我试过了,但我无法在响应正文中获取散列密码。
  • 请参考修改后的解决方案。
猜你喜欢
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 2016-06-15
  • 2023-04-08
相关资源
最近更新 更多