Express Sessionはログイン認証機能を実装(コード添付)

php中世界最好的语言
リリース: 2018-04-18 11:08:36
オリジナル
1904 人が閲覧しました

今回は、ログイン認証機能を実装するための Express Session について説明します (コード付き)。Express Session でログイン認証機能を実装するための 注意事項 について、実際のケースを見てみましょう。

Express と Session を使用してログイン検証を実装することを検討している人がこの記事では簡単に紹介します。具体的な実装コードは何ですか?一緒に調べてみましょう。

1. 前に書きます

Web サイトにログインするときに、ログアウトせずに Web サイトを閉じますが、しばらくしてから再度 Web サイトを開くと、ログインしたままになります。これは、Web サイトにログインすると、ログアウトするか、保存されたログイン ステータスの有効期限が切れるまで、サーバーがログイン ステータスを保存するためです。では、サーバーはログインステータスをどのように保存するのでしょうか? 答えはセッションです。サービスはこれを通じて各クライアント接続のステータスを記録できます。ここでは、Session の原理については詳しく説明しません。この記事では、Session を使用して Express フレームワークで ユーザー ログイン 認証を実装する方法を主に紹介します。

2. 環境設定

Node環境にはExpressとSessionを統合したライブラリがないため、まずプロジェクトディレクトリを作成し、以下のコマンドを使用してプロジェクトのルートディレクトリに4つのモジュールをインストールする必要があります。

1) 特急

このモジュールを使用すると、Web 開発フレームワークを迅速に構築できます。

2) ボディパーサー

このモジュールは Express モジュールの ミドルウェア であり、ブラウザーによって送信された本文データの解析を容易にします。

3) エクスプレスセッション

このモジュールは Express モジュール ミドルウェアでもあり、クライアント セッションの処理を容易にします。

4) エジェス

このモジュールはレンダリング エンジンです。 バックグラウンド変数データをフロントページにバインドすると便利です。

次のようにインストールします:

npm install express --save
npm install body-parser --save
npm install express-session --save
npm install ejs --save
ログイン後にコピー

3. ログインと認証

セッションはサーバー上のクライアントのステータスをマークできます。これを使用して、クライアントのログイン検証を実装できます。セッション ログイン検証のプロセスは大まかに次のとおりです。クライアントがログインしていないときにホームページをリクエストした場合、サーバーはクライアントのログイン後にリクエストをログイン ページにリダイレクトします。サーバーはクライアントのログイン ステータスを記録して保存する必要があります。アクティビティ期間を指定すると、次回サーバーがホームページをリクエストしたときに、クライアントのログイン ステータスを判断できるようになります。ログイン ステータスが有効な場合は、クライアントが必要とするページに直接戻ります。そうでない場合は、ログインにリダイレクトします。ページ。

セッションの有効期限については、セッションの有効期限が設定されていない場合、サーバーは、独自の構成のデフォルトの有効期間に基づいて、長期間サーバーと対話しなかったセッションを削除します。

サンプルコードを以下に掲載します。インターフェースは比較的シンプルで、サーバーのバックグラウンドコードのコメントが明確に書かれているため、再度の説明は省略します。

プロジェクトのディレクトリ構造は次のとおりです:

ログインページ (login.html) のコードは次のとおりです:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style type="text/css">
  </style>
</head>
<body>
  <form action="/login" method="POST">
    用户名: <input type="text" name="username"/> <br>
    密码: <input type="password" name="pwd"/>
    <input type="submit" value="Submit"/>
  </form>
</body>
</html>
ログイン後にコピー

ホームページ (home.html) のコードは次のとおりです:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <p>用户名:<span><%= username %> </span> <a href="/logout" rel="external nofollow" >退出登录</a></p>
</body>
</html>
ログイン後にコピー

サーバー (app.js) コードは次のとおりです:

/**
 * Created by tjm on 9/7/2017.
 */
var express = require('express');
var app = express();
var session = require('express-session');
var bodyparser = require('body-parser');
// 下面三行设置渲染的引擎模板
app.set('views', dirname); //设置模板的目录
app.set('view engine', 'html'); // 设置解析模板文件类型:这里为html文件
app.engine('html', require('ejs').express); // 使用ejs引擎解析html文件中ejs语法
app.use(bodyparser.json()); // 使用bodyparder中间件,
app.use(bodyparser.urlencoded({ extended: true }));
// 使用 session 中间件
app.use(session({
  secret : 'secret', // 对session id 相关的cookie 进行签名
  resave : true,
  saveUninitialized: false, // 是否保存未初始化的会话
  cookie : {
    maxAge : 1000 * 60 * 3, // 设置 session 的有效时间,单位毫秒
  },
}));
// 获取登录页面
app.get('/login', function(req, res){
  res.sendFile(dirname + '/login.html')
});
// 用户登录
app.post('/login', function(req, res){
  if(req.body.username == 'admin' && req.body.pwd == 'admin123'){
    req.session.userName = req.body.username; // 登录成功,设置 session
    res.redirect('/');
  }
  else{
    res.json({ret_code : 1, ret_msg : '账号或密码错误'});// 若登录失败,重定向到登录页面
  }
});
// 获取主页
app.get('/', function (req, res) {
  if(req.session.userName){ //判断session 状态,如果有效,则返回主页,否则转到登录页面
    res.render('home',{username : req.session.userName});
  }else{
    res.redirect('login');
  }
})
// 退出
app.get('/logout', function (req, res) {
  req.session.userName = null; // 删除session
  res.redirect('login');
});
app.listen(8000,function () {
  console.log('http://127.0.0.1:8000')
})
ログイン後にコピー

この時点で、セッションのログイン認証は完了です。上記の例では、セッションはサービス メモリに保存されていますが、セッション ミドルウェアを構成するだけで、ファイルまたはデータベースに保存することもできます。

app.use(session({
  secret: 'secretkey',
  store: new MongoStore({
    db: 'sessiondb'
  })
}));
ログイン後にコピー

この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

node.jsは読み取りおよび書き込み同期機能を実装します

2つの文字列内の同じデータを比較する方法

以上がExpress Sessionはログイン認証機能を実装(コード添付)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート