[Authentication] 如何在node.js中實現登錄認證


Answers

其實這不是問題的答案,但這是一個更好的方法。

我建議你使用connect / express作為http服務器,因為它們為你節省了大量的時間。 你顯然不想重新發明輪子。 在你的情況下,連接/快速會話管理更容易。

除了身份驗證,我建議你使用everyauth 。 這支持很多認證策略。 令人敬畏的快速發展。

所有這一切都可以輕鬆地從他們的文檔粘貼一些副本!

Question

我有這個節點服務器運行:

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是未定義的。

請建議如何編寫這個登錄模塊,它可以為每個用戶正確維護登錄身份驗證。




@alessioalex答案是新鮮節點用戶的完美演示。 但無論如何,很難將checkAuth中間件寫入除登錄之外的所有路由,所以最好將每個路由的checkAuth移動到app.use中的一個條目。 例如:

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)