【Rails】閲覧時にパスワードを要求する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をインストールしておいてください。
https://qiita.com/ryosuketter/items/ceb592dc6b23a20e51b5

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

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

SHARE

コメント

コメントする

目次
閉じる