Railsで作ったサイトを閲覧しようとしたとき、IDとパスワードを要求して閲覧者を限定するBASIC認証を設定したい場合があります。
そもそも、BASIC認証はサーバー上に「.htaccess」と「.htpasswd」を用意することで閲覧制限を設けます。
Railsでは環境変数としてIDとパスワードを用意しつつ、コントローラー(Controller)側でも宣言が必要です。
Herokuでデプロイしたサイトの場合もまとめているので、ぜひ参考にしてください。
1. 環境変数でIDとパスワードを設定
まずIDとパスワードを決定します。
今回は例としてIDはtest
、パスワードはtestpass
として設定することにします。
Railsの環境変数を設定するファイル.env
に以下のように記述します。
BASIC_AUTH_NAME=test
BASIC_AUTH_PASSWORD=testpass
もしまだ環境変数を.env
で管理できるように設定していなかった場合は、下記を参考にして必要なgemをインストールしておいてください。
Herokuの場合
もしサイトがHeroku上にデプロイされているサイトの場合は、.envファイルではなく下記いずれかの方法で環境変数を設定してください。
- Heroku CLIを利用して設定
- Herokuの管理画面から設定
詳しい手順はこちらの記事にまとめています。
2. コントローラー(Controller)で宣言
次にRailsのコントローラー(Controller)にてBASIC認証を適用する宣言を記述します。
サイト全体にBASIC認証を設定したい場合は、app/controllers/application_controller.rb
に設定すればOK。
特定のページなどに設けたい場合は、対応したコントローラーに記述してください。
before_action :basic
def basic
authenticate_or_request_with_http_basic do |name, password|
name == ENV['BASIC_AUTH_NAME'] && password == ENV['BASIC_AUTH_PASSWORD']
end
end
1行目before_action
により、すべてのcontrollerが実行する前に共通で関数basic
が実行されるようにしています。
もしBASIC認証を特定の環境下(production環境のみ、など)で行いたい場合は、下記のように記述します。
before_action :basic
def basic
if Rails.env == "production"
authenticate_or_request_with_http_basic do |name, password|
name == ENV['BASIC_AUTH_NAME'] && password == ENV['BASIC_AUTH_PASSWORD']
end
end
end
4行目にて環境がproductionである場合のみBASIC認証を行うように条件分岐しています。
これでBASIC認証の設定は完了です。
コメント