RailsアプリへのBasic認証導入

こんにちは!kossyです!






元々腹痛持ちなのですが、ここ最近その症状が悪化しています。
多分原因はペットボトルのラッパ飲みだと思うので、
今後は控えようかと思います、、、










さて、今回はRailsアプリケーションへのBasic認証の導入方法をブログに残そうかと思います。
Basic認証は、あらかじめ設定してあるパスワードとユーザー名を入力することで、
Webアプリへのアクセスを許可する認証方式です。
Basic認証はセキュリティ上の問題があり、ユーザー名とパスワードが平文で送られるため、漏洩のリスクがあります。
なので、必要最低限のセキュリティ認証だと思ったほうがいいようです。






今回は本番環境での実装方法を以下に示します。


まずはターミナルで環境変数を設定します

$ vim ~/.bash_profile

# 下記を記述

export BASIC_AUTH_USER='任意の文字列'
export BASIC_AUTH_PASSWORD='任意の数列'

$ source ~/.bash_profile

その後、


application_controller.rbに以下のコードを記述

class ApplicationController < ActionController::Base
  before_action :basic_auth, if: :production?
  protect_from_forgery with: :exception

  private

  def production?
    Rails.env.production?
  end

  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







production?メソッドは、本番環境ならtrue、そうでないならfalseを返すように、
Rails.env.production?と記述します。そして、before_action :basic_auth の後に、
if: :production?と記述することによって、本番環境のみでbasic_authメソッドが実行されるようになります。

これで本番環境でのみBasic認証を導入できます。

Rails.envメソッドは、

Rails.env.development?
Rails.env.test?
Rails.env.production?
Rails.env.your_custom_environment?



等の使い方をし、
現在のRails環境をチェックすることができます。


ちなみに公式には、
You can check your current Rails environment using nice methods
と記述があり、グーグル翻訳大先生に翻訳させてみると、


[現在のRails環境を素敵な方法でチェックすることができます]


と素敵な翻訳結果を返してくれます。