概要
アプリケーションにBasic認証を導入したので、その手順を記載する。
実装方針
認証に必要なユーザー名やパスワードは、環境変数を呼び出す形式で実装する。
開発環境および本番環境に、環境変数を設定する。
デプロイはherokuを利用する。
実装条件
適切なユーザー名やパスワードが入力された場合は、認証を通過できること。
適切ではないユーザー名やパスワードが入力された場合は、認証は通過できないこと。
Basic認証とは
・HTTP通信の規格に備え付けられている、ユーザー認証の仕組みのこと。
・サーバーとの通信が可能なユーザーとパスワードをあらかじめ設定しておき、それに一致したユーザーのみが、Webアプリケーションを利用できるようになる。
・Ruby on Railsにはauthenticate_or_request_with_http_basicメソッドという、Basic認証をするためのメソッドが用意されている。便利なのでこれを利用しよう!
・ブロックを開き、ブロック内部でusernameとpasswordを設定することでBasic認証を利用できます。
安全性について
・HTTP通信で定義されている仕様上、漏洩のリスクはある。ログアウトの概念もないため、必要になる場合は自分で実装しなければいけない。
・完全に信頼できる認証方式ではないので、必要最低限の認証機能として利用すること。
・履歴書やポートフォリオに記載する場合・友人や知人にアプリケーションを見てもらう場合は、GitのURLに加えて、Basic認証のIDとPASSも記載しないと誰もみてくれないので要注意!笑
・逆にあやまってIDとPASSを不特定多数が見れるところに記載してしまうと、不正利用に繋がるので注意です^^
手順
・application_cotroller.rbに以下を追記する。
application_cotroller.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
・vim ~/.zshrc
で環境変数を定義する。
・「vim」:サーバー上で使用できるテキストエディタのこと。
・「zsh」:ログインシェルと呼ばれるもので、プログラムを実行する時に、ユーザーの要求に一番最初に対応する役割を担う。シェルとは、「ターミナルとOSを繋ぐ窓口役」のこと。隠しファイルなので、特別な設定なしではFinderなどには表示されない。環境変数は.zshrcの中で設定する。
・「bash」:zsh同様、ログインシェルの1つです。OSがCatalina以降であれば「zsh」、Mojave以前であれば「bash」が自動で適用される。環境変数を記載する場所は、設定ファイルである「.bash_profile」の中。
・ インサートモードに移行してユーザー名とパスワードを設定する
export BASIC_AUTH_USER='xxxx'
export BASIC_AUTH_PASSWORD='xxxx'
・escで「通常モード」に → :wqで編集した内容を保存してvimを強制終了
・編集した内容を保存しない場合は、q!で強制終了できる。一応補足しておくと、:wは作成・編集したファイルを保存、:qはvimの終了を意味している。
・source ~/.zshrc
→シェルに記述された内容を実行
・application_cotroller.rbでusernameとpasswordを修正する
def basic_auth
authenticate_or_request_with_http_basic do |username, password|
username == ENV['BASIC_AUTH_USER'] && password == ENV['BASIC_AUTH_PASSWORD']
end
end
・以下を実行
heroku config:set BASIC_AUTH_USER="xxxx"
heroku config:set BASIC_AUTH_PASSWORD="xxxx"
・heroku config
→config内容を確認
・Gitにコミット・プッシュする
git add .
git commit -m "Basic認証を導入"
git push heroku main