記事概要
Ruby on RailsにBasic認証を導入する方法について、まとめる
前提
- Ruby on Railsでアプリケーションを作成している
使用するメソッド
コードに直接ユーザー情報を記述
コードを読めるとログインできるため、セキュリティ対策できていない
手順
-
application_controller.rbを編集するapplication_controller.rbclass ApplicationController < ActionController::Base before_action :basic_auth private def basic_auth authenticate_or_request_with_http_basic do |username, password| # ユーザー名'admin'のパスワード'1111'のみ利用できる username == 'admin' && password == '1111' end end end
シェルを使用して、zshに環境変数を定義
手順(開発環境)
- 環境変数を設定する
- ターミナル.appで下記を実行する
# アプリのディレクトリに移動 % cd ~/[アプリ名] % vim ~/.zshrc - 「iキー」を押して、インサートモードに移行する
ターミナルの左下に「INSERT」と表示されたら成功 - zshの内部に、以下の記述を追加する
※既存の記述がある場合、最下部に追記export BASIC_AUTH_USER='admin' export BASIC_AUTH_PASSWORD='1111' - 記述を追加後、「escキー」を押す
ターミナル左下の「INSERT」が消える - 「INSERT」が消えたことを確認後、
:wqと入力する - 「Enterキー」を押して終了する
- 「sourceコマンド」を実行する
% source ~/.zshrc
- ターミナル.appで下記を実行する
- 環境変数をRailsアプリケーション側で読み込む設定
-
application_controller.rbを修正するapplication_controller.rbclass 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
-
- サーバーを再起動する
手順(本番環境)※Renderでデプロイ
- Renderのダッシュボードを開く
- リストから、アプリ名をクリックする
TYPEが「Web Service」になっていることを確認 - 環境変数の設定
- メニューの中の「Environment」をクリックする
- 下記内容で環境変数の設定を行う
Key Value BASIC_AUTH_PASSWORD 1111 BASIC_AUTH_USER admin - 「Save Change」をクリックする
- 環境変数をRailsアプリケーション側で読み込む設定
-
application_controller.rbを修正する
application_controller.rbclass 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 -
- GitHub Desktopを使ってコードをプッシュする
- mainブランチが更新されるとrenderでのデプロイが自動的にスタートされる
- デプロイ後、render上に公開したアプリへアクセスし、Basic認証をパスできるか確認する
動作確認
- サーバーを起動する
- アプリを起動する
- ユーザー名とパスワードの入力が求められることを確認する
- 設定したユーザー名とパスワード以外ではログインできないことを確認する
- 設定したユーザー名とパスワードでサイトにログインできることを確認する
Basic認証が現れない場合
Basic認証が現れない場合、下記どちらかを実行する
一定期間「Basic認証を通過した」という情報が保持され、その期間はBasic認証が現れなくなるため
- シークレットウィンドウにて確認する
- ブラウザのキャッシュをすべて削除する
Ruby on Railsまとめ