gpt4 book ai didi

javascript - 使用 bcrypt 获取有效密码

转载 作者:行者123 更新时间:2023-12-03 22:43:08 27 4
gpt4 key购买 nike

我正在使用带有 sequelize 的 nodejs 来设置我的数据库,目前我正在尝试对我的密码进行散列和加盐,我已经进行了散列,但是现在当我登录时,我想将 req.body 中发送的密码与散列进行比较一,所以我这样做:

router.post('/', function (req, res, next) {
console.log("hi");
if (JSON.stringify(req.body) == "{}") {
return res.status(400).json({ Error: "Login request body is empty" });
}
if (!req.body.username || !req.body.password) {
return res.status(400).json({ Error: "Missing fields for login" });
}

var password = User.validPassword(req.body.password);


// search a user to login
User.findOne({ where: { username: req.body.username, password: password } }) // searching a user with the same username and password sended in req.body
.then(function (user) {
if (!user) {
return res.status(400).json({ Error: "There is no user with those fields" }); // if there is no user with specific fields send
}
return res.status(400).json({ Error: "loged in!" }); // username and password match
}).catch(function (err) {
return res.status(200).json({ message: "server issues when trying to login!" }); // server problems
});
});

我的模型是这样的:
"use strict";
var sequelize = require('./index');
var bcrypt = require('bcrypt-nodejs');

module.exports = function (sequelize, DataTypes) {
var User = sequelize.define("User", {
username: DataTypes.STRING,
email: DataTypes.STRING,
password: DataTypes.STRING
}, {
classMethods: {
generateHash: function (password) {
console.log("hi");
return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
},
validPassword: function (password) {
return bcrypt.compareSync(password, this.password);
}
}

});



return User;
}

我没有得到任何回应
var password = User.validPassword(req.body.password);

我尝试使用console.log,但没有响应,当我尝试访问路由器/登录时,它只是没有给我任何响应,它一直在加载,有什么建议吗?

最佳答案

首先,您的路由定义了一个对 / 而不是 /login 的 post 操作。如果您还没有前端,可以使用 postman 来尝试一下。

应该在 User 模型的实例上调用 validPassword 方法,因此您应该像这样编写这部分代码

router.post('/', function (req, res, next) {
console.log("hi");
if (JSON.stringify(req.body) == "{}") {
return res.status(400).json({ Error: "Login request body is empty" });
}
if (!req.body.username || !req.body.password) {
return res.status(400).json({ Error: "Missing fields for login" });
}

// search a user to login
User.findOne({ where: { username: req.body.username } }) // searching a user with the same username and password sended in req.body
.then(function (user) {
if(user && user.validPassword(req.body.password)) {
return res.status(200).json({message: "login successful"});
} else {
return res.status(401).json({message: "Unauthorized"});
}

}).catch(function (err) {
return res.status(200).json({ message: "server issues when trying to login!" }); // server problems
});
});

同样在你的 catch 方法中,状态代码应该是描述内部服务器错误的东西,比如 500200 不合适。

关于javascript - 使用 bcrypt 获取有效密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43964576/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com