[sinatra].htpasswdを使ったbasic認証をやってみる


sinatraで作っているアプリにbasic認証をかけようと思って調べていたのですが、公式に載っているサンプルだと一組のid、パスワードしか扱えなかったので、.htpasswdを読み込んで使えるようにできないかやってみました。

これで、

bundle install --path=vendor/bundler
bundle exec rackup config.ru -p 4567

とすれば.htpasswdを読み込んでbasic認証をかけるアプリが起動します。

.htpasswdにfooユーザが存在している場合、認証が通ると「Hello foo!」と表示されます。

authorized?メソッドの中で、.htpasswdファイルの中身を解析して、ユーザが入力したid, パスワードと一致するかチェックしています。

basic認証の場合、一度認証するとブラウザを閉じるまでAuthorizationヘッダを送りつづけるので、/logoutにアクセスすると強制的に401レスポンスを送って、ログアウト状態にするようにしました。

とりあえずは動いたけど、こんな感じでいいんだろうか。

参考