1. ホーム
  2. authentication

node.jsでログイン認証を実装する方法

2023-09-21 07:06:14

質問

私はこのノードサーバを実行しています。

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変数を追加し、request.session変数を設定しようとしましたが、request.sessionが未定義であると言われました。

どのように私はすべてのユーザーに対して適切にログイン認証を維持することができ、このログインモジュールを書くことができます示唆してください。

どのように解決するのですか?

以下は、私が 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/ja/guide/routing.html もっと複雑なことが必要な場合は、次のサイトを参照してください。 あらゆる認証 (これはfacebookやtwitterなど、多くの認証メソッドを備えています。 ここで ).