我正在尝试在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:“无效的凭证”} 全局:“无效的凭据”
答案 0 :(得分:1)
您正在根据bcrypt
上的compatibility-note使用$ 2y $ bcrypt。
此库支持$ 2a $和$ 2b $前缀bcrypt哈希。 $ 2x $和 $ 2y $散列特定于为Jon开发的bcrypt实现 松土。从理论上讲,它们应该与$ 2b $前缀兼容。
与其他语言生成的哈希值的兼容性不是100% 由于字符编码中的差异而得到保证。但是, 在大多数情况下应该不是问题。
您可以使用其他brcypt模块twin-bcrypt,默认情况下使用$ 2y $