6
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Organization

【N予備校】Basic認証によりログイン、ログアウト

自分的メモ要素が強いです。

Basic認証とは?

HTTPのプロトコルで定義されている。
ヘッダの値に、エンコードされたIDとパスワードを含めて通信することで認証する方式。
しかし、暗号化されないBase64という方式でエンコードを行うために、HTTPSのように暗号化されていないただのHTTPで使用すると盗聴や改ざんされる恐れがある。
Basic認証以外の認証方法でメジャーな方法としては、Cookieというヘッダを利用した認証や、OAuth認証と呼ばれる方式がある。

Bacic認証を実装

まずはBasic 認証をするためのライブラリをインストール

npm install http-auth@3.2.3 --save

index.js

const http = require('http');
const pug = require('pug');
const auth = require('http-auth');
const basic = auth.basic(
  { realm: 'Enter username and password.' },
  (username, password, callback) => {
  callback(username === 'guest' && password === 'xaXZJQmE');
  });
const server = http.createServer(basic, (req, res) => {
console.info('Requested by ' + req.connection.remoteAddress);
res.writeHead(200, {

解説

const auth = require('http-auth');

上記のコードはBasic認証をするためのモジュールを読み込んでいるコード。

const basic = auth.basic(
 { realm: 'Enter username and password.' },
 (username, password, callback) => {
  callback(username === 'guest' && password === 'xaXZJQmE');
});

上記はBasic認証の設定を行うコード。
basic関数にはオブジェクトと無名関数を渡している。
オブジェクトのrealmプロパティには、Basic認証時に保護する領域を規定する文字列となる。
無名関数では指定された呼び出し方でユーザー名とパスワードを設定。

const server = http.createServer(basic, (req, res) => {

http.createServerの第一引数にbasicオブジェクトを渡してBasic認証に対応させてserverのオブジェクトを作成している。

ログアウトを実装

Basic認証では、特定のURLにアクセスした際に、ステータスコード「401 - Unauthorized」を返すことによってログアウトされる。
index.js

console.info('Requested by ' + req.connection.remoteAddress);
    if (req.url === '/logout') {
        res.writeHead(401, {
            'Content-Type': 'text/plain; charset=utf-8'
    });
    res.end('ログアウトしました');
    return;
}

解説
パスが/logoutであるときに、ステータスコード「401 - Unauthorized」を返す処理。
メッセージ「ログアウトしました」をコンテンツとして書き出して、res.endでレスポンスを終了している。また、return文でこの関数の実行を終えている。

所感
N予備校のカリキュラム的にはこの後からCookieの実装やデータベースとの連携に入ってくる。
Webサービスを作る際に最低限必要なサーバーサイドの知識は学べそう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
6
Help us understand the problem. What are the problem?