【Rails】閲覧時にパスワードを要求するBASIC認証の設定方法

BASIC認証の設定方法まとめ

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認証の設定は完了です。

BASIC認証の設定方法まとめ

この記事が気に入ったら
いいね または フォローしてね!

SHARE
  • URLをコピーしました!

コメント

コメントする

目次