LoginSignup
4
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-08-08

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

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サービスを作る際に最低限必要なサーバーサイドの知識は学べそう。

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6