gpt4 book ai didi

javascript - Expressjs 认证

转载 作者:搜寻专家 更新时间:2023-11-01 00:15:53 30 4
gpt4 key购买 nike

我有一些关于登录和 session 的问题。我有这段代码:

数据库查询:

login: function(req,callback) {
var query = 'SELECT id FROM users WHERE email = "' + req.body.email_login + '" AND password = "' + hashlib.sha1(req.body.password_login) + '" LIMIT 1';
client.query(query, callback);
}

路线:

app.post('/login', function(req, res, next) {

users.login(req,function(err, results) {
if (err) {
res.render('index');
} else if (results[0]) {
req.session.userdata = results[0];
req.session.is_logged_in = true;
res.render('site/news');
}

}
}

授权中间件:

var auth = function (req, res, next) {
if (req.session.userdata && req.session.is_logged_in === true) {
next();
} else {
res.redirect('/');
}
}

我为 session 使用数据库存储。

现在我的问题是:

1) 这是一种安全的方法吗?还是我应该考虑以其他方式进行?

2) 假设我有这个 URL /domain/users/1,其中最后一段是用于获取用户数据的用户 ID。在那个 View 中,我有一个用于更改用户数据的表单。检查用户 ID 是否与 session 用户 ID 匹配然后显示表单是否安全?

在 View 中:

// e.g. get the session.id from dynamichelper
if (data.userid === session.userdata.id) {
// The form where user can change his data contained within here
}

服务器将使用 SSL。

提前致谢

乔治

最佳答案

在数据库查询代码中,检查 req.body.email_login 和 req.body.password_login 以确保它们不为空并且是字符串。有人可能会发送一个空响应,这将在您这边产生一个内部错误。

同样在路由中,您可能想要记录错误并将用户重定向到/500.html 页面(内部错误):

if (err) {
console.log(error);
res.redirect('500');
} else ...

你不应该在 View 中这样做:

if(data.userid === session.userdata.id) { //The form where user can change his data contained within here }

尝试在模型中实现这一点(最好),为它创建一个函数并只将一个参数传递给 View ,如下所示:

res.render('view', { loggedIn: true });

模型中的函数:

function checkUser(id, session) {
return (userid === session.userdata.id);
}
...
module.exports.checkUser = checkUser;

你可以像这样从路由调用它(例如):

res.render('view', { loggedIn: model.checkUser(req.body.id, req.session); }

关于javascript - Expressjs 认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8444969/

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