登录身份验证不起作用或在nodejs中验证用户

时间:2019-04-05 09:56:39

标签: node.js bcrypt

我正在尝试在nodejs中创建登录系统,并且我正在使用bcrypt进行密码哈希处理,但是每次尝试获取用户时都会出现错误,我认为它没有进行任何查询。

这就是我尝试的方式

  

models / User.js

import mongoose, { Schema } from 'mongoose';
import bcrypt from 'bcrypt';

//Todo: add uniqueness and email validattions 
const schema = new mongoose.Schema({
    email: {
        type: String,
        required: true,
        lowercase: true,
        index: true,
    },
    passwordHash: {
        type: String,
        required: true
    },

}, { timestamps: true });


schema.methods.isValidPassword = function isValidPassword(password) {
    return bcrypt.compareSync(password, this.passwordHash)
}

export default mongoose.model('User', schema)
  

routes / auth.js

import express from 'express';
import User from '../models/User';

const router = express.Router();

router.post('/', (req, res) => {
    const { credentials } = req.body;
    User.findOne({ email: credentials.email }).then(user => {
        if (user && user.isValidPassword(credentials.password)) {
            res.json({ user: { email: user.email } });
        } else {
            res.status(400).json({ errors: { global: "Invalid credentials" } });
        }
    });
});
export default router;

在检查中的网络面板中显示此错误。

  

{错误:{全局:“无效的凭据”}}}   错误:{global:“无效的凭证”}   全局:“无效的凭据”

1 个答案:

答案 0 :(得分:1)

您正在根据bcrypt上的compatibility-note使用$ 2y $ bcrypt。

  

此库支持$ 2a $和$ 2b $前缀bcrypt哈希。 $ 2x $和   $ 2y $散列特定于为Jon开发的bcrypt实现   松土。从理论上讲,它们应该与$ 2b $前缀兼容。

     

与其他语言生成的哈希值的兼容性不是100%   由于字符编码中的差异而得到保证。但是,   在大多数情况下应该不是问题。

您可以使用其他brcypt模块twin-bcrypt,默认情况下使用$ 2y $