当前位置: 首页 > 面试题库 >

保存到数据库以与护照模块兼容之前,如何对密码进行哈希加密(本地护照)

景安翔
2023-03-14
问题内容

我正在使用护照的本地护照策略进行身份验证。在我的快递服务器中,我收到注册请求,应该将新用户的密码保存到db中。但是我需要在保存到数据库之前对密码进行哈希处理。

但是我不确定如何对其进行哈希处理,因为password会通过对登录密码凭据进行哈希处理来匹配我从数据库获得的哈希密码,从而对用户进行身份验证。我应该如何哈希我的密码?

我正在使用这个模块。


问题答案:

passport-local不会对您的密码进行哈希处理-
它将凭据传递给您的verify回调以进行验证,并且您需要处理凭据。因此,您可以使用任何哈希算法,但我相信bcrypt是最受欢迎的算法。

您在注册处理程序中对密码进行哈希处理:

app.post('/register', function(req, res, next) {
  // Whatever verifications and checks you need to perform here
  bcrypt.genSalt(10, function(err, salt) {
    if (err) return next(err);
    bcrypt.hash(req.body.password, salt, function(err, hash) {
      if (err) return next(err);
      newUser.password = hash; // Or however suits your setup
      // Store the user to the database, then send the response
    });
  });
});

然后在您的验证回调中,将提供的密码与哈希进行比较:

passport.use(new LocalStrategy(function(username, password, cb) {
  // Locate user first here
  bcrypt.compare(password, user.password, function(err, res) {
    if (err) return cb(err);
    if (res === false) {
      return cb(null, false);
    } else {
      return cb(null, user);
    }
  });
}));


 类似资料:
  • 保安。今天,任何应用程序如果没有适当的安全性编程--无论是由开发人员使用的框架,还是由开发人员自己编程--都无法在internet上生存。我目前正在开发一个使用承载令牌身份验证的RESTful API,但一直在阅读有关XSS和CSRF攻击的内容。 问题1)从我所读到的内容中,我看到使用基于令牌的身份验证的RESTful API的应用程序容易受到XSS而不是CSRF的攻击,如果令牌存储在浏览器的Lo

  • 问题内容: 目前,据说MD5部分不安全。考虑到这一点,我想知道使用哪种机制进行密码保护。 这个问题,“双重哈希”密码是否比仅哈希一次密码安全? 建议多次散列可能是一个好主意,而如何对单个文件实施密码保护?建议使用盐。 我正在使用PHP。我想要一个安全,快速的密码加密系统。将密码哈希一百万次可能更安全,但也更慢。如何在速度和安全性之间取得良好的平衡?另外,我希望结果具有恒定数量的字符。 哈希机制必须

  • 问题内容: 当PHP应用程序建立数据库连接时,通常当然需要传递登录名和密码。如果我为我的应用程序使用单个最小权限登录名,则PHP需要在某个地方知道该登录名和密码。保护该密码的最佳方法是什么?似乎只在PHP代码中编写它不是一个好主意。 问题答案: 有人将其误解为关于如何在数据库中 存储 密码的问题。那是错的。它是关于如何存储使您能够 访问 数据库的密码的。 通常的解决方案是将密码从源代码移到配置文件

  • protection([string $password]); 示例一 $config = ['path' => './tests']; ​ $fileObject = new \Vtiful\Kernel\Excel($config); $fileObject = $fileObject->fileName('tutorial.xlsx'); ​ $filePath = $fileObject

  • 如果用户创建了一个新密码,并通过哈希算法存储在数据库中,则在用户登录时可以将其与用户输入的密码进行匹配。输入到登录屏幕的密码将被哈希化,然后检查它是否与存储的哈希匹配。如果是,则允许用户访问。 然而,如今,密码是经过哈希和盐处理的。因此,当用户第一次注册密码时,它会经过一个散列,然后会被加密10000次以上。这个salt与后端代码生成的关键字相同,还是每次salt都随机生成? 当用户输入密码登录时

  • 问题内容: 我使用Node.js + passport设置了一个用于用户身份验证的站点。 现在,我需要迁移到Golang,并需要使用保存在db中的用户密码进行身份验证。 Node.js加密代码为: 如何使用Golang制作与Node.js bcrypt相同的哈希字符串? 问题答案: 我相信使用golang.org/x/crypto/bcrypt软件包将是: 工作示例: