Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

express4で特定のURLだけベーシック認証ページを実装してみる

らくらくパス付きページの代表格といえば、ベーシック認証。
全体に適用するだけなら、以前書いた記事の通りです。
shuzo-kino.hateblo.jp

今回は特定のURLだけベーシック認証ページを実装してみます。

実際のところ

導入

いつもの通り、npm。

$ npm i --save basic-auth-connect

ここでいう"connect"とは、expressのバックエンドまわりをやってくれる子です。
railsでいう、rackみたいなものなのだそうです。

スクリプト

通常のアプリに加えて、admin用のページを用意する場合を考えます。
メインのものにbasic-auth-connectを入れると全部対象になってしまうので
Router機能を使って分離します。
Routerについては、後日別途記事にします。

var express = require('express');
var app = express();
app.set('view engine', 'jade');

// 中略

// basicAuth for Admin Apps
var basicAuth = require('basic-auth-connect');
var adminApp  = express.Router();

adminApp.use(basicAuth('user', 'passw0rD'));

adminApp.get('/admin', function(req, res) {
    res.render('index', { title: 'Our Admin Apps!', message: "Welcome to the admin page"});
});

app.use('/', adminApp);

// Wake up the app
app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

adminApp以外のパスに接続しても、認証画面は出ません。
アプリを起動し/adminにアクセスすると、見慣れたベーシック認証の画面の後、"Welcome to the admin page"と出るはずです。
まぁ、これだと万全では無いので、外に出すツールなら色々細工はした方が良いでしょう。