目的
アプリケーション(サーバー)へのアクセスを制限するため、Basic認証(ユーザー名とパスワードが無いとサーバーにアクセスできなくさせる)を導入する。
導入の流れ
1.authenticate_or_request_with_http_basicメソッドを実施
#Basic認証によるログインの要求は、すべてのコントローラーで行いたいため、
Basic認証の処理をapplication_controller.rbのprivate以下にメソッドとして定義し、before_actionで呼び出す。
before_action :basic_auth
private
def basic_auth
authenticate_or_request_with_http_basic do |username, password|
username == 'admin(任意)' && password == '2222(任意)'
end
end
2.Basic認証のコードを編集
上記1のコードでは、ログインにユーザーネームとパスワードが記載されており、セキュリティ面で不安が残るため、環境変数を利用する必要がある。
ただ、Basic認証は完全に信頼できる認証方法でないと知っておく必要がある。
(HTTP通信で定義されている仕様上、ユーザー名とパスワードが通信経路上にそのまま送られるため、漏洩のリスクがある。また、ログアウトの概念が定義されていないため、もし必要になる場合は自力で実装する必要がある。などが理由)
Basic認証に関する環境変数は、シェルと呼ばれるプログラムを用いて、定義する。
・シェル:ターミナルとOSを繋ぐ窓口役
シェルを用いて、zshもしくはbashと呼ばれるファイルに環境変数を定義する。
・zsh:ログインシェルと呼ばれるもので、プログラムを実行する時に、ユーザーの要求に一番最初に対応する役割を担う。隠しファイルなので、特別な設定なしではFinderなどには表示されない。環境変数を記載する場所は、設定ファイルである「.zshrc」の中。
・bash:zsh同様、ログインシェルの1つ。zshとの違いは、OSがCatalina以降であれば「zsh」、Mojave以前であれば「bash」が自動で適用される。環境変数を記載する場所は、設定ファイルである「.bash_profile」の中。
zshやbashなどの設定ファイルは、vimというコマンドを用いて編集する。(見えないファイルだから)
・vim:サーバー上で使用できるテキストエディタ。vimコマンドを用いることで、指定したファイルの編集をターミナルから行うことが可能になる。
% vim ~/.zshrc #使用例(zshrcファイルの編集をターミナルから行う)
vimには「通常モード」と「インサートモード」がある。
・通常モード:コマンドを打つことでファイルを保存したりvimを終了したりできる。
・インサートモード:ファイルに編集を加えることができる。この場合、「i」キーを押すことで「insert(インサート)モード」になり、文字の入力が可能になる。ファイル編集後は、Escキーを押すと「通常モード」に戻る。
[通常モードで使えるコマンド一覧]
:w #作成・編集したファイルを保存する。
:q #vimを終了します。
:q! #編集した内容を保存しないでvimを強制終了します。
:wq #編集した内容を保存してvimを強制終了します。
ファイル編集後は、sourceコマンドを実行する必要がある。
・sourceソースコマンド:シェルに記述された内容を実行する役割を担う。今回は、zshファイル、もしくはbashファイルに記述された内容を実行する。
3.開発環境で環境変数を設定する手順(macOSがCatalina以降の場合)
#手順①
% vim ~/.zshrc
#手順②
「iキー」を押して、インサートモードに移行。
ターミナルの左下に「INSERT」と表示されたら成功。
#手順③
zshrcファイル内に以下2行のコードを記載
~ここから~
export BASIC_AUTH_USER='admin'
export BASIC_AUTH_PASSWORD='2222'
~ここまで~
#手順④
「escキー」を押して、 「:wq」と入力。入力後、「Enterキー」を押して終了。
#手順⑤
% source ~/.zshrc #sourceコマンドの実行
※macOSがMojave以前であれば、編集するファイルを「.bash_profile」に変更し同様の手順を踏めば良い。
4.本番環境で環境変数を設定する手順
#以下コマンドを順に実行
% heroku config:set BASIC_AUTH_USER="admin(任意)"
% heroku config:set BASIC_AUTH_PASSWORD="2222(任意)"
(% heroku config でパスワードとユーザー名が表示されていれば、正しく設定ができている。)
#変更したコードをコミットし、Herokuへデプロイ。
% git add .
% git commit -m "Basic認証を導入"
% git push heroku master