Node.js 使用Meteor创建的密码进行用户身份验证

Node.js 使用Meteor创建的密码进行用户身份验证,node.js,meteor,bcrypt,Node.js,Meteor,Bcrypt,我正在尝试从服务器验证用户,使用Meteor中创建的密码和存储在DB中的帐户密码。但是,密码从不匹配。我做错了什么 var bcrypt = require('bcryptjs'); var crypto = require('crypto'); var raw_pass = 'my_pass'; var pass = crypto.createHash('sha256').update(raw_pass).digest('hex');

我正在尝试从服务器验证用户,使用Meteor中创建的密码和存储在DB中的帐户密码。但是,密码从不匹配。我做错了什么

    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);
                }
            });

如果您打印出
bcrypt.compare的输出,将对我们有所帮助。

它可能返回0,这意味着成功,但在if语句中,0将被解释为false。

如果您打印出
bcrypt.compare的输出,将对我们有所帮助。

它可能返回0,这意味着成功,但在if语句中,0将被解释为false。

帐户密码不使用密码。 只有使用bcrypt和salt才能生成加密密码


您可以检查比较密码

帐户密码不使用密码加密。 只有使用bcrypt和salt才能生成加密密码


您可以检查bcrypt的比较密码参数。比较参数为“普通字符串”和“加密字符串”。因此,正确的解决方案是:

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);
            }
        });

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);
            }
        });

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

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

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

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

无论密码是否正确,结果总是“false”(布尔值)。什么是doc.services.password.bcrypt?是不是应该是
pass
?很抱歉给您添麻烦了。这是Meteor在services/password/bcrypt中存储的数据库中的密码。关于
bcrypt,本网站还有一些其他问题。请比较
。可能有帮助。无论密码是否正确,结果总是“false”(布尔值)。什么是doc.services.password.bcrypt?是不是应该是
pass
?很抱歉给您添麻烦了。这是Meteor在services/password/bcrypt中存储的数据库中的密码。关于
bcrypt,本网站还有一些其他问题。请比较
。可能会有帮助。我认为这不是真的使用bcrypt散列存储在数据库中的密码。//
password
可以是字符串(在这种情况下,它将在bcrypt之前通过//SHA256)或具有属性
digest
和/
算法的对象(在这种情况下,我们使用bcrypt
password.digest
)//是的,你很在乎。这是使用rsa 256和digest。我认为这不是真的使用bcrypt散列存储在数据库中的密码。//
password
可以是字符串(在这种情况下,它将在bcrypt之前通过//SHA256)或具有属性
digest
和/
算法的对象(在这种情况下,我们使用bcrypt
password.digest
)//是的,你很在乎。它是使用rsa 256和digest的。它不是这样工作的。meteor使用bcrypt和salt(默认情况下为10)在明文pwd经过sha256加密后生成密码,但这种方式不起作用。meteor使用bcrypt和salt(默认为10)在明文pwd被sha256加密后生成密码