我正在尝试实现用户身份验证,在我的服务器上,我正在执行以下操作以进行登录:
从请求正文的电子邮件/密码中查询用户电子邮件/密码。所以,我的选择查询将返回类似于:
的内容我在通过bcrypt运行密码后存储密码。现在,如果来自req.body的用户密码是“kittycats”,我是否应该使用bcrypt的比较在req.body.password
和db.password
之间进行比较?
我对这种东西不熟悉,所以我不知道这是否是一种“好习惯”,或者我是否完全错了。
由于
答案 0 :(得分:0)
是比较功能允许使用存储的哈希验证密码。实际上我不熟悉node.js库,但我认为这是API文档:
https://github.com/kelektiv/node.bcrypt.js#to-check-a-password
compare函数与任何其他BCrypt库一样,它从存储的哈希中提取salt和成本因子,并根据密码计算可比较的哈希值。然后它检查存储的散列和计算的散列是否相同。
答案 1 :(得分:0)
您可以使用passport.js.
来实现它您可以在passport.js中设计本地策略以进行身份验证。有一个NPM包可用于此。请查看passport-local。
从您的问题来看,您似乎正在使用SQL数据库。我不确定如何使用SQL数据库使用护照。有一个thread谈到将护照与SQL一起使用。请检查一下。
我可以告诉你我如何使用带有猫鼬的passport.js。
//我的用户模型:
var mongoose = require('mongoose');
var passportLocalMongoose = require('passport-local-mongoose');
var Schema = mongoose.Schema;
var userSchema = new Schema({
username: String,
password: String
});
userSchema.plugin(passportLocalMongoose);
var User = mongoose.model('user', userSchema);
module.exports = User;
//在app.js中添加此内容
var express = require('express');
var app = express();
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var User = require('/path/to/user/model');
passport.use('user', new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.post('/register', function(req, res){
User.register(new User({
username: req.body.username
}),
req.body.password,
function(err, user) {
passport.authenticate('local')(req, res, function() {
return res.status(200).json({
success: true,
message: 'Registration Successful!'
});
});
);
});
app.post('/login', function(req, res){
passport.authenticate('user', function(err, user, info) {
if (err) {
//handle err
}
if (!user) {
//user not found
}
req.logIn(user, function(err) {
if (err) {
//handle err
}
//Login successful!
});
})(req, res, next);
});
希望你觉得它很有用!