我有一个正在运行的节点服务器:
var server=http.createServer(function(request, responsehttp) {
if (request.method == 'POST') {
var body = '';
request.on('data', function (data) {
body += data;
});
request.on('end', function () {
var POST = qs.parse(body);
processquery(POST, request, responsehttp);
});
} else {
var url_parts = url.parse(request.url, true);
var query = url_parts.query;
console.log(query);
processquery(query, request, responsehttp);
}
});
我想添加此服务器.so的登录表单,当用户通过身份验证时,它将显示。
function processquery(query, request, responsehttp){
var returnResult = function (data){
responsehttp.end(JSON.stringify(data));
};
if (!query.command) {
fileprocess(request, responsehttp);
}
responsehttp.writeHead(200, {"Content-Type": "application/json"});
switch(query.command) {
case 'logout':
logout(query, returnResult);
break;
case 'login':
login(query, returnResult);
break;
}
}
在查询函数中,如果没有给出任何命令,则将文件返回给客户端,这样我就可以将登录命令从客户端发送到服务器端,但是服务器端在接收到带有用户名密码的登录命令时应该怎么做,它应该如何处理登录请求并返回登录成功或失败,为了编写这一部分,我需要帮助。
我试过的。
function login(request, callback) {
if(request.username==users[request.username] && request.password==users[request.username].password) {
users[request.username].auth=true;
var data = {result:'success','message':'login successful'};
callback(data);
} else {
var data = {result:'error','message':'login incorrect'};
callback(data);
}
}
请建议如何在此添加会话,我尝试在登录函数中添加请求变量,并尝试设置request.session变量,它显示request.session未定义。
请建议我如何编写此登录模块,以便为每个用户正确维护登录身份验证。
发布于 2011-11-03 17:58:42
发布于 2017-05-05 15:38:06
@alessioalex answer是一个完美的新节点用户演示。但不管怎样,除了登录之外,很难将checkAuth中间件写到所有路由中,所以最好使用app.use将checkAuth从每个路由移动到一个条目。例如:
function checkAuth(req, res, next) {
// if logined or it's login request, then go next route
if (isLogin || (req.path === '/login' && req.method === 'POST')) {
next()
} else {
res.send('Not logged in yet.')
}
}
app.use('/', checkAuth)
发布于 2018-08-20 06:35:59
我试过这个答案,但它对我不起作用。我也是web开发的新手,上过mlab的课,但我更喜欢解析,这就是为什么我必须寻找最合适的解决方案的原因。这是我目前在expressJS上使用parse的解决方案。
1)检查用户是否通过了身份验证:我有一个名为isLogginIn的中间件函数,我在每个需要对用户进行身份验证的路由上使用它:
function isLoggedIn(req, res, next) {
var currentUser = Parse.User.current();
if (currentUser) {
next()
} else {
res.send("you are not authorised");
}
}
我在我的路由中使用这个函数,如下所示:
app.get('/my_secret_page', isLoggedIn, function (req, res)
{
res.send('if you are viewing this page it means you are logged in');
});
2)登录路由:
// handling login logic
app.post('/login', function(req, res) {
Parse.User.enableUnsafeCurrentUser();
Parse.User.logIn(req.body.username, req.body.password).then(function(user) {
res.redirect('/books');
}, function(error) {
res.render('login', { flash: error.message });
});
});
3)注销路由:
// logic route
app.get("/logout", function(req, res){
Parse.User.logOut().then(() => {
var currentUser = Parse.User.current(); // this will now be null
});
res.redirect('/login');
});
这对我来说非常有效,我完整地参考了这里的文档https://docs.parseplatform.org/js/guide/#users
感谢@alessioalex的回答。我只是更新了最新的实践。
https://stackoverflow.com/questions/7990890
复制相似问题