Basic認証の導入方法(Heroku)

 Basic認証とは、Webアプリを閲覧できるユーザーを制限するために導入するものです。このBasic認証を導入すると、URLにアクセスした際に、事前に設定したユーザー名とパスワードを入力しなければならなくなります。

 

1. 開発環境で環境変数を設定

2. 環境変数Railsで読み込む

3. 本番環境で環境変数の設定

 

 行うことは以上の3点です。

 

1. 開発環境で環境変数を設定

 まずユーザー名とパスワードを環境変数化します。ターミナルで下記のコマンドを実行していきましょう。MacOSがCatalina以降の場合です。

ターミナル

% vim ~/.zshrc

 「iキー」を押してユーザー名とパスワードを設定します。

export BASIC_AUTH_USER='ユーザー名'
export BASIC_AUTH_PASSWORD='パスワード'

 「escキー」と「:wq」を押して終了し、下記のコマンドを実行します。

% source ~/.zshrc

 

2. 環境変数Railsで読み込む

 コントローラーで下記の記述をします。インデントが整っていないのはブログの仕様上です。

app/controllers/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

 

3. 本番環境で環境変数の設定

 ターミナルで下記のコマンドを実行します。

ターミナル

% heroku config:set BASIC_AUTH_USER="ユーザー名"
% heroku config:set BASIC_AUTH_PASSWORD="パスワード"

 下記のコマンドで反映できているか確認できます。

% heroku config

 

 下記のコマンドでコミットしてデプロイできます

% git add .
% git commit -m "Basic認証の導入"
% git push heroku master

 

 

 

 おまけではありますが、このBasic認証を導入している場合、コントローラーのテストコードを実行した際にエラーが起きました。

 
before_action :basic_auth if Rails.env.production?
 

  テストコードの際はBasic認証を使わないという記述を加えることで解決しました。

 

 

以上です。