How to Basic認証
概要
Webアプリケーション作成において、Basic認証が必要になりました。
に引き続き、定着のためアウトプットしていきます。
Basic認証とは
Basic認証は、HTTP通信にログイン情報を乗せて送る認証機能です。Basic認証を導入したWebアプリケーションにアクセスすると、ポップアップウィンドウが表示され、ログイン情報を求められます。ログイン機能、といえばRailsにはdeviseというライブラリがありますが、deviseは「ユーザー」の新規登録やログインなど、サービス面を構築するのに対し、Basic認証は公開前のアプリケーションなど、「開発者」の管理のために使います。
使い方
メソッド定義
Railsには、Basic認証を実装するためのメソッドがあります。application_controller.rbにbefore_actionとして記述することで、全ての機能に認証をかけることができます。
以下のように記述し、ブロックの内部でusernameとpasswordを設定します。
class ApplicationController < ActionController::Base before_action :basic_auth private def basic_auth authenticate_or_request_with_http_basic do |username, password| username == 'administrator' && password == 'password' end end end
これで、アプリケーションへのアクセス時にusernameとpasswordを要求されるようになりました。usernameの欄にはadministrator、passwordの欄にはpasswordと入力すればアクセスが可能です。
環境変数への設定
ここまでの作業でBasic認証を実装することができましたが、このソースコードをGithubなどで管理する場合、第三者もログイン情報を知ることができてしまいます。
開発環境、本番環境の双方にて環境変数を設定し、ソースコードからログイン情報が読み取れないように対策していきます。
開発環境の環境変数に、ログイン情報を格納します。
% vim ~/.zshrc # .zshrcを開いたら、「i」とタイプしてインサートモードに移行 # .zshrcの内部に次の記述を追加 export BASIC_AUTH_USER='administrator' export BASIC_AUTH_PASSWORD='password' # 記述を追加したら、escキーを押してインサートモードを抜け、「:wq」と入力して保存して終了する # .zshrcを再読み込みし、定義した環境変数を有効にする % source ~/.zshrc
これで、ローカル環境の環境変数にログイン情報を格納できました。
次は、application_controller.rbにて、アプリケーションのログイン情報を環境変数で読み込むように設定していきます。
class ApplicationController < ActionController::Base before_action :basic_auth private def basic_auth authenticate_or_request_with_http_basic do |username, password| username == ENV["BASIC_AUTH_USER"] && password == ENV["BASIC_AUTH_PASSWORD"] # 環境変数を読み込む記述に変更 end end end
以上で、開発環境におけるログイン情報の環境変数への格納は完了しました。
それでは、本番環境にも環境変数を設定していきましょう。
heroku_app % heroku config:set BASIC_AUTH_USER="administrator"
heroku_app % heroku config:set BASIC_AUTH_PASSWORD="password"
|
正しく設定できているか確認します。
heroku_app % heroku config
以下のように表示されればOKです。
BASIC_AUTH_PASSWORD: password BASIC_AUTH_USER: administrator
変更したコードをコミットし、デプロイします。
heroku_app % git add . heroku_app % git commit -m “Basic認証を導入” heroku_app % git push heroku master
また、実装してもポップアップウィンドウが表示されない場合はブラウザに情報が保存されてしまっている可能性があるので、シークレットウィンドウモードでアクセスしてみてください。