【发布时间】:2018-05-14 21:38:49
【问题描述】:
我在服务器上使用 NodeJs,我需要添加一些基本的身份验证功能,该功能在将任何文件(如 html 或 js 文件)下载到用户的浏览器之前要求用户提供凭据。当我在未登录时尝试查看源代码时,我无法像在this 中那样访问它。
这适用于 basic-auth 模块,但仅适用于一个用户名和密码。
app.use(basicAuth('username', 'password'));
还有一个问题——我需要从数据库中加载这个凭据并检查用户是否是管理员并比较他的加密密码。 我试过这个:
// ****
var basicAuth = require('basic-auth');
// ****
app.use(function (req, res, next) {
var user = basicAuth(req);
if (user) {
var c = mysql.createConnection(db);
var q = "SELECT * FROM user WHERE email = '" + user.name + "' AND admin = 1;";
c.query(q, function (error, result) {
c.end();
if (error) {
console.log(error);
res.set('WWW-Authenticate', 'Basic realm="example"');
return res.status(401).send();
} else {
if (result.length === 1 &&
bcrypt.compareSync(user.pass, result[0].password)) {
return next();
} else {
res.set('WWW-Authenticate', 'Basic realm="example"');
return res.status(401).send();
}
}
});
} else {
res.set('WWW-Authenticate', 'Basic realm="example"');
return res.status(401).send();
}
});
这很好用,但是每次浏览器与服务器通信时都会调用此函数,加载简单页面时大约是 70 次(它不会再次询问用户凭据,“仅”运行此函数)。这个函数每次请求持续约200ms(因为查询和密码比较),总之加载持续约15秒,这是不可接受的。
你能帮我解决这个问题吗?或者向我推荐一些其他的 NodeJs 库,可以帮助我解决这个问题吗?
谢谢。
【问题讨论】:
标签: javascript node.js authentication basic-authentication