【问题标题】:User authentication with password created by Meteor使用 Meteor 创建的密码进行用户身份验证
【发布时间】:2017-05-19 12:07:50
【问题描述】:

我正在尝试使用由帐户密码在 Meteor 中创建并存储在数据库中的密码来验证来自服务器的用户。但是密码永远不会匹配。我做错了什么?

    var bcrypt = require('bcryptjs');
    var crypto = require('crypto');
    var raw_pass = 'my_pass';
    var pass = crypto.createHash('sha256').update(raw_pass).digest('hex');              
    var encryptedPassword = bcrypt.hashSync(pass, bcrypt.genSaltSync(10));
    bcrypt.compare(doc.services.password.bcrypt, encryptedPassword, function(err, result) {
                if(result) {
                   console.log('OK');
                }
                else {
                   console.log(403);
                }
            });

【问题讨论】:

    标签: node.js meteor bcrypt


    【解决方案1】:

    根据流星生成的密码检查普通密码的正确方法是使用 sha256 和 bcrypt,如下所示

    var bcrypt = require('bcrypt')
    var sha256 = require('sha256')
    const samePassword = bcrypt.compareSync(
                            sha256(plainTextPassword),
                            user.services.password.bcrypt
                         )
    

    【讨论】:

      【解决方案2】:

      bcrypt.compare 的参数是“纯字符串”和“加密字符串”。所以正确的解决方案是:

      var raw_pass = 'my_pass';
      var pass-256 = crypto.createHash('sha256').update(raw_pass).digest('hex');              
      bcrypt.compare(meteor.password, pass-256, function(err, result) {
                  if(result) {
                     console.log('OK');
                  }
                  else {
                     console.log(403);
                  }
              });
      

      【讨论】:

      【解决方案3】:

      如果您打印出bcrypt.compare 的输出,将会对我们有所帮助。 它可能返回 0,这意味着成功,但在您的 if 语句中,0 将被解释为 false。

      【讨论】:

      • 无论密码是否正确,结果始终为“假”(布尔值)。
      • 什么是 doc.services.password.bcrypt?不应该是pass吗?
      • 抱歉给您带来了困惑。它是 Meteor 存储在 services/password/bcrypt 中的 DB 中的密码。
      • 关于bcrypt.compare 这个网站还有一些其他问题。 This one 可能会有所帮助。
      【解决方案4】:

      帐户密码不使用密码作为密码。 它只使用 bcrypt 和 salt 来生成加密密码。

      您可以检查比较密码here

      【讨论】:

      • 我认为这不是真的。 // 使用 bcrypt 对密码进行哈希处理以存储在数据库中。 // password 可以是一个字符串(在这种情况下,它将在 bcrypt 之前通过 // SHA256 运行)或具有属性 digest 和 // algorithm 的对象(在这种情况下,我们 bcrypt password.digest)。 //
      • 是的,你关心的没错。github.com/meteor/accounts/blob/…
      • 是的。它使用 rsa 256 和摘要。
      猜你喜欢
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 2018-11-02
      • 2021-12-14
      相关资源
      最近更新 更多