gpt4 book ai didi

express - 使用 mongoose + express.js 验证用户

转载 作者:行者123 更新时间:2023-12-04 21:57:47 25 4
gpt4 key购买 nike

使用 Mongoose 和 ExpreeJS 验证用户身份的最佳方式是什么。

我正在使用 mongoose 3.x,看起来这个包不再更新了:https://github.com/bnoguchi/mongoose-auth

理想情况下,我也可以使用 Twitter 和 Facebook 对用户进行身份验证。

最佳答案

我总是不喜欢对每个问题都使用插件或模块。只使用 Mongoose 你可以这样做:

为您的 mongoDB 配置准备一个 db.js

var mongoose = require('mongoose');
mongoose.connect("mongodb://...");
var userSchema = new mongoose.Schema({
username: String,
salt: String,
hash: String
});
exports.User = mongoose.model("user", userSchema);

使用 TJ 的 pass.js文件来散列密码。它使用 crypto.pbkdf2用于加密。

手动创建用户或使用表单以允许自行注册:

var db = require('./db');
var pwd = require('./pwd');
var user = new db.User();
user.username = "Admin";
pwd.hash("adminPassword", function(err, salt, hash) {
if (err) {
console.log(err);
}
user.salt = salt;
user.hash = hash;
user.save(function(err) {
if (err) {
console.log(err);
} else {
console.log("user saved");
}
});
});

现在您的数据库中应该有一个具有用户名、加密密码和哈希值的用户。要检查登录,请使用中间件功能:

function authenticate(name, pass, fn) {
db.User.findOne ({username: name}, function(err, user) {
if (!user) return fn(new Error('cannot find user'));
hash(pass, user.salt, function(err, hash){
if (err) return fn(err);
if (hash == user.hash) return fn(null, user);
fn(new Error('invalid password'));
})
})
}

app.post('/login', function(req, res){
authenticate(req.body.username, req.body.password, function(err, user){
if (user) {
req.session.regenerate(function(){
req.session.user = user;
res.redirect('back');
});
} else {
res.redirect('login');
}
});
});

// middleware
function restrict(req, res, next) {
if (req.session.user) {
next();
} else {
req.session.error = 'Access denied!';
res.redirect('/login');
}
}

// route with restrict middleware
app.get('/restricted', restrict, function(req, res){
res.send('Wahoo! restricted area');
});

大部分代码取自 auth例如,我添加了 Mongoose 的东西。希望这对您有所帮助!

关于express - 使用 mongoose + express.js 验证用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12546657/

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