本日は、Basic認証の導入手順を復習のため記事に
残したいと思います。
バージョン
・Ruby 2.6.5
・Rails 6.0.0
・macOS Big Sur
Basic認証とは
Basic認証とは、HTTP通信の規格に備え付けられている、ユーザー認証の仕組みのことです。
簡単に説明すると、作成したアプリケーションにユーザー名とパスワードを記述して入力した人だけが
アプリケーションを使えるよと言うものです。
Basic認証導入手順
まずは、ユーザーとパスワードを設定しましょう。
設定には、authenticate_or_request_with_http_basicメソッドを使用します。
Basic認証によるログインの要求は、すべてのコントローラーで行いたいです。
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 == ユーザー && password == パスワード
end
end
end
Basic認証の処理をapplication_controller.rbのprivate以下にメソッドとして定義し、before_actionで呼び出しましょう。
これで、設定できました。
Basic認証コードを改良
設定できましたが、このままではGit Hubに更新した際にそのまま載ってしまうので
セキュリティ的に良くないため、環境変数を利用する実装に切り替えます。
basic_authメソッド内で直接記述しているユーザー名とパスワードを、開発環境の環境変数に格納します。
これは使用しているMacのOSによってやり方は変わってきます。
今回は、OSがCatalina以降のやり方となります。
1.コマンドの実行
% vim ~/.zshrc
2.「iキー」を押して、インサートモードに移行します。
ターミナルの左下に「INSERT」と表示されるのを確認。
3.zshの内部に、以下の記述を追加しましょう。
export BASIC_AUTH_USER=ユーザー
export BASIC_AUTH_PASSWORD=パスワード
既にzsh内に記述がある場合は、その記述の下に「追加」します。既存の記述を削除してしまうと、パソコンが正常に動作しなくなる危険性があります。
4.記述を追加したら「escキー」を押して、 「:wq」と入力しましょう。
入力後、「Enterキー」を押して終了します。
5.最後に、「sourceコマンド」を実行します。
% source ~/.zshrc
これで、環境変数の設定は完了です。
出てきたいくつかの用語について説明させていただきます。
・zsh(ズィーシェル)
「zsh」はログインシェルと呼ばれるもので、プログラムを実行する時に、ユーザーの要求に一番最初に対応する役割を担います。隠しファイルなので、特別な設定なしではFinderなどには表示されていません。
環境変数を記載する場所は、設定ファイルである「.zshrc」の中です。
OSがCatalina以降であれば「zsh」、Mojave以前であれば「bash」が自動で適用されます。
・vim(ヴィム)
vim」とは、サーバー上で使用できるテキストエディタです。vimコマンドを用いることで、指定したファイルの編集をターミナルから行うことが可能です。
以下が使用例になります。
・source(ソース)コマンド
「sourceコマンド」とは、シェルに記述された内容を実行する役割を担います。zshファイルに記述された内容を実行します。
つまり、.zshrcというファイルは隠しファイルで直接記述できないので、vimコマンド
で編集を行い、sourceコマンド実行を行うということですね。
使っているMacのOSによって、「zsh」か「bash」か変わって来るので、設定する前に確認
が必要です。
ここまでできたら再度、application_controller.rbファイルを編集しましょう。
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
これで、環境変数を使って、Basic認証を行えるユーザー名とパスワードを定義できました。
本番環境での環境変数の設定
続いて、Herokuの本番環境のアプリケーションにも設定を行います。
下記のコマンドを入力します。
% heroku config:set BASIC_AUTH_USER=ユーザー
% heroku config:set BASIC_AUTH_PASSWORD=パスワード
設定できたかは、下記のコマンドで確認できます。
% heroku config
=== stormy-journey-22625 Config Vars
BASIC_AUTH_PASSWORD: パスワード
BASIC_AUTH_USER: ユーザー
変更したコードをコミットしHerokuにデプロイします。
% git add .
% git commit -m "Basic認証を導入"
% git push heroku master
これで、すべて設定は完了です。
使っている環境によってやり方が違う場合もあるので
ご了承ください。