ホームページ  >  記事  >  ウェブフロントエンド  >  Nodejsでバックエンドにログインする方法

Nodejsでバックエンドにログインする方法

WBOY
WBOYオリジナル
2023-05-23 13:02:39507ブラウズ

サーバーサイドの JavaScript 実行環境を実装するための開発ツールとして、Node.js は徐々に広く使用されるようになりました。 Node.js は、イベント駆動型の方法でネットワーク アプリケーションを作成する方法を提供し、開発者がサーバーを簡単にセットアップして Web ベースのアプリケーションを構築できるようにします。

多くの Web アプリケーションでは、ユーザーのログインは非常に重要な部分です。管理者は、データとビジネスを管理するためにバックエンド管理システムにログインする必要があります。そのため、Node.jsでは基本的なログイン認証を実装する必要があり、その処理にはユーザー本人認証やコールバック管理などの一連の操作が必要となります。

この記事では、ミドルウェアの使用、セッション セッション管理の使用、JSON Web Token (JWT) を使用したトークン認証の実装など、Node.js での一般的なログイン認証方法をいくつか紹介します。

ミドルウェアの使用

Node.js では、ミドルウェアは HTTP リクエストを処理し、応答の変更やリクエストを次のミドルウェアに渡す決定を可能にする重要な概念です。そのため、ログイン機能の実装もミドルウェアで完結できます。

ミドルウェアを使用する最大の利点は、コードの可読性と保守性が向上することです。同時に、コードの繰り返しモジュールを減らすこともできます。

コード例:

const express = require('express');
const app = express();
const port = 3000;

//中间件
app.use(express.urlencoded({extended: false}));
app.use(express.json());

//登录页面
app.get('/login', function(req, res) {
  res.sendFile(__dirname + '/login.html');
});

//登录验证
app.post('/login', function(req, res){
  const username = req.body.username;
  const password = req.body.password;

  if(username === 'admin' && password === '123456'){
    // 验证成功,则可以将用户信息存储到session中
    req.session.userinfo = req.body;
    res.send('登录成功');
  }else{
    res.send('用户名或密码错误!');
  }
});

app.listen(port, function(){
  console.log(`Server is running on port ${port}`);
});

上記のコードでは、express ミドルウェアを使用して HTTP リクエストと応答を処理し、express-sessionミドルウェアはユーザーセッションを管理します。

セッション セッション管理を使用する

Web 開発の現場では、セッションとはサーバー側に情報を保存するメカニズムを指します。これはキーと値の形式で保存され、キーはセッション ID、値は JSON 形式のオブジェクトであり、ユーザーの ID 情報や権限情報などを保存できます。

Node.js で基本的なセッション管理を実装するには、express-sessionミドルウェアを使用する必要があります。 express-session ミドルウェアを使用する場合、セッションのセキュリティを確保できる署名用のパラメーター secret を設定する必要があります。同時に、resave パラメーターと saveUnitialized パラメーターを false に設定する必要があります。これにより、セッションの書き換えが回避され、初期化されていないセッションが保存されます。

コード例:

const express = require('express');
const app = express();
const session = require('express-session');
const port = 3000;

//使用express-session中间件
app.use(session({
  secret: 'sessiontest',
  resave: false,
  saveUnitialized: false,
  cookie: {
    maxAge: 1000 * 60 * 30
  }
}));

// 登录页面
app.get('/login', function(req, res) {
  res.sendFile(__dirname + '/login.html');
});

//登录验证
app.post('/login', function(req, res){
  const username = req.body.username;
  const password = req.body.password;

  if(username === 'admin' && password === '123456'){
    // 验证成功,则可以将用户信息存储到session中
    req.session.userinfo = req.body;
    res.send('登录成功');
  }else{
    res.send('用户名或密码错误!');
  }
});

//后台页面
app.get('/admin', function(req, res){
    // 验证session中是否存储了用户信息
    const userinfo = req.session.userinfo;
    if(userinfo && userinfo.username){
        res.sendFile(__dirname + '/admin.html');
    }else{
        //如果未存储,则重定向到登录页面
        res.redirect('/login');
    }
});

app.listen(port, function(){
  console.log(`Server is running on port ${port}`);
});

JSON Web Token (JWT) を使用してトークン認証を実装する

セッションを使用してユーザーのログイン ステータスを管理するだけでなく、JSON Web を使用することもできます。トークン認証を実装するためのトークン (JWT)。 JWT は、軽量で安全かつ柔軟な認証プロトコルです。このプロトコルでは、サーバーはユーザー情報を含むトークンを生成し、そのトークンをクライアントに返します。後続のリクエストでは、HTTP ヘッダーにトークンを含める必要があります。

JWT を使用する利点は、ユーザー情報をサーバーに保存する必要がなく、ユーザー情報をトークンにエンコードするため、サーバー上のストレージの負担が軽減されることです。同時に、トークンにはユーザー情報が含まれているため、ユーザー ID 情報をクライアントとサーバー間で簡単に転送できます。

JWT を使用するには、jsonwebtoken ライブラリを使用してクエリ操作を実装する必要があります。クエリ操作は、node.js とブラウザーで動作します。 jsonwebtoken を使用する場合は、生成されたトークンが認証されて受け入れられることを保証するために、キーと有効期間を設定する必要があります。

コード例:

const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
const port = 3000;

//生成Token
app.post('/login', function(req, res){
  const username = req.body.username;
  const password = req.body.password;

  if(username === 'admin' && password === '123456'){
    const userinfo = {
      name: username
    }
    //在jsonwebtoken中生成Token
    jwt.sign(userinfo, 'secretkey', {expiresIn: '10min'}, function(err, token){
      if(err) throw err;
      res.json({
        token: token
      });
    })
  }else{
    res.send('用户名或密码错误!');
  }
});

// 验证Token
app.get('/admin', verifyToken, function(req, res){
  res.sendFile(__dirname + '/admin.html');
});

//中间件,用于验证Token
function verifyToken(req, res, next){
  //从请求头中获取Token
  const bearerHeader = req.hearders['authorization'];
  if(typeof bearerHeader !== 'undefined'){
    const bearerToken = bearerHeader.split(' ')[1];
    // 在jsonwebtoken中验证Token
    jwt.verify(bearerToken, 'secretkey', function(err, data){
      if(err) res.sendStatus(403);
      req.userinfo = data;
      next();
    });
  }else{
    res.sendStatus(403);
  }
};

app.listen(port, function(){
  console.log(`Server is running on port ${port}`);
});

上記の方法により、Node.js に基本的なログイン認証機能を実装できます。特定のビジネス ニーズに基づいて、さまざまなソリューションを選択できます。同時に、抜け穴が発生したりユーザーデータが損傷したりしないように、ログインのセキュリティと安定性にも注意を払う必要があります。

以上がNodejsでバックエンドにログインする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。