RailsでBasic認証を実装する

手順はこんな感じ

  1. application_controller.rb にBasic認証のメソッドを追加
  2. Basic認証をかけたい箇所のcontrollerのbefore_actionで 1で作成したメソッドを呼び出す
  3. 環境変数を任意の環境に設定する

application_controller.rb にBasic認証のメソッドを追加

def hoge_basic_auth
  authenticate_or_request_with_http_basic do |username, password|
    username == ENV["HOGE_BASIC_AUTH_USER"] && password==ENV["HOGE_BASIC_AUTH_PASSWORD"]
  end
end

authenticate_or_request_with_http_basic」はRailsが用意してくれているBasic認証をするためのメソッドです。

Basic認証に用いるusernameやpasswordは環境変数にしておきましょう。
ソースコードが漏れた際に、悪用される可能性がある為です。

Basic認証をかけたい箇所のcontrollerのbefore_actionで 1で作成したメソッドを呼び出す

class HogeController < ApplicationController
  before_action :hoge_basic_auth, if: :production?

特定のページでBasic認証をかけたい場合は上記のように。
ページ全体にかけたい場合は、ApplicationControllerに同じように記載します。

普通は本番環境にかけるだけでいいと思うので、if: :production? としています。

環境変数を任意の環境に設定する

本番環境にssh接続して、bash_profileに記載。

export HOGE_BASIC_AUTH_USER='user'
export HOGE_BASIC_AUTH_PASSWORD='pass'

source .bash_profile を忘れずに行ってから、Basic認証かかっているか確認しましょう。

因みに、以下のコマンドで環境変数を確認出来ます。

printenv HOGE_BASIC_AUTH_USER
printenv HOGE_BASIC_AUTH_PASSWORD