小编典典

如何在node.js中实现登录身份验证

node.js

我正在运行此节点服务器:

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);
    }
});

我想为此服务器添加登录表单。因此,当用户通过身份验证时,它将显示。

   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未定义)。

请建议我如何编写此登录模块,该模块可以为每个用户正确维护登录身份验证。


阅读 497

收藏
2020-07-07

共1个答案

小编典典

这是我使用Express.js的方法

1) 检查用户是否通过身份验证 :我有一个名为CheckAuth的中间件函数,该函数在需要验证用户身份的每条路由上使用:

function checkAuth(req, res, next) {
  if (!req.session.user_id) {
    res.send('You are not authorized to view this page');
  } else {
    next();
  }
}

我在这样的路线中使用此功能:

app.get('/my_secret_page', checkAuth, function (req, res) {
  res.send('if you are viewing this page it means you are logged in');
});

2) 登录路径:

app.post('/login', function (req, res) {
  var post = req.body;
  if (post.user === 'john' && post.password === 'johnspassword') {
    req.session.user_id = johns_user_id_here;
    res.redirect('/my_secret_page');
  } else {
    res.send('Bad user/pass');
  }
});

3) 注销途径:

app.get('/logout', function (req, res) {
  delete req.session.user_id;
  res.redirect('/login');
});

如果您想了解有关Express.js的更多信息,请在此处查看其网站:expressjs.com/en/guide/routing.html
如果需要更复杂的内容,请查看everyauth(对于facebook,twitter,它有很多auth方法可用)等;关于此的好教程)。

2020-07-07