概要
アプリの作成が完了し、Herokuへのデプロイも終わりました。
今回はBasic認証 (ユーザー認証) の実装をします。
ユーザー名とパスワードを知っているユーザーのみ、アプリへアクセスできるようにします。
Basic認証とは
Basic認証は、HTTP通信の規格に備え付けられているユーザー認証の仕組みのことです。
サーバーとの通信が可能なユーザーとパスワードを事前に設定し、それに一致したユーザーのみ、アプリを利用できるようにします。
今回はusernameを「abc」、パスワードを「1111」で実装していきます。
実装手順
手順① Basic認証をアプリへ導入
authenticate_or_request_with_http_basicメソッドを利用し、railsアプリにBasic認証を導入します。
Basic認証は、すべてのコントローラーで行います。
Basic認証の処理をapplication_controller.rbのprivate以下にメソッドとして定義し、before_actionで呼び出します。
class ApplicationController < ActionController::Base
end
# ⬇︎ 以下のように編集 ⬇︎
class ApplicationController < ActionController::Base
before_action :basic_auth
private
def basic_auth
authenticate_or_request_with_http_basic do |username, password|
username == 'abc' && password == '1111'
end
end
end
上記の記述でどのページにアクセスしてもBasic認証が要求されるようになりました。
Basic認証の動作を確認
% rails s
間違ったユーザー名とパスワードではアクセスできないことを確かめるため、適当な文字を入力します。
もう一度同じ画面が表示されれば成功です。
ユーザー名に「abc」、パスワードに「1111」を入力すればログインできます。
(ユーザー名とパスワードは自身で適切なものを考えて実行して下さい)
手順② Basic認証のコードを改良
現時点でBasic認証をアプリへ導入できました。しかし、ユーザー名とパスワードがコードに記述されているため、安全性にかけます。
そのため、コードに直接ユーザー名とパスワードを記述するのではなく、環境変数を利用する実装に切り替えます。
環境変数を設定
basic_authメソッド内で直接記述しているユーザー名とパスワードを、開発環境の環境変数に格納します。
以下のコマンドを入力します。
(ここから出てくるコマンドの詳細は下の方の「必要知識」に記載しています)
% vim ~/.zshrc
「iキー」を押し、インサートモードに移行します。
左下に「INSERT」と表示されたら成功です。
zshの内部に、以下を追加します。
既にzsh内に記述がある場合、その記述の「下」に追加します。既存の記述を削除してしまうと、パソコンが正常に動作しなくなる危険性があります。
記述を追加したら「escキー」を押し「INSERT」が消えたことを確認し、「:wq」と入力します。
その後「Enterキー」を押して終了します。
最後に「sourceコマンド」を実行します。
% source ~/.zshrc # 記述された内容を実行
これでBASIC_AUTH_USER と BASIC_AUTH_PASSWORDという名前で、それぞれユーザー名とパスワードを定義できました。次に、この環境変数をアプリ側で読み込むように記述します。
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"] # この1行を変更
end
end
end
これで環境変数を使いBasic認証を行えるユーザー名とパスワードを定義できました。
環境変数が反映されているか確認します。
サーバー再起動後、環境変数として設定したユーザー名とパスワードでログインができれば、成功です。
(Basic認証が現れない場合、シークレットウィンドウにて確認してみましょう)
手順③ 本番環境で環境変数を設定
Heroku上に環境変数を設定
以下のコマンドを入力します。
% heroku config:set BASIC_AUTH_USER="abc"
% heroku config:set BASIC_AUTH_PASSWORD="1111"
Heroku上で環境変数を確認
% heroku config
以下が確認できれば成功です。
BASIC_AUTH_PASSWORD: 1111
BASIC_AUTH_USER: abc
最後に変更したコードをコミットし、Herokuへデプロイします。
% git add .
% git commit -m "Basic認証を導入"
% git push heroku master
Heroku上の挙動を確認
Heroku上に公開したアプリへアクセスし、Basic認証が行えるか確認しましょう。
設定したユーザー名とパスワードでログインができれば、成功です。
必要知識
zsh(ズィーシェル)
「zsh」はログインシェルと呼ばれるものです。
プログラムを実行する際に、ユーザーの要求に1番最初に対応する役割を担います。
隠しファイルのため、特別な設定なしではFinderなどには表示されていないです。
環境変数を記載する場所は、設定ファイルである「.zshrc」の中です。
bash(バッシュ)
「bash」とは、 zshと同じくログインシェルの1つです。zshとの違いは、OSがCatalina以降であれば「zsh」、Mojave以前であれば「bash」が自動で適用されます。
環境変数を記載する場所は、設定ファイルである「.bash_profile」の中です。
vim(ヴィム)
「vim」とは、サーバー上で使用できるテキストエディタです。
vimコマンドを用いることで、指定したファイルの編集をターミナルから行うことが可能です。
これらの設定ファイルは、vimというコマンドを用いて編集します。
% vim ~/.zshrc
vimには「通常モード」と「インサートモード」があります。
通常モードは、コマンドを打つことでファイルを保存したりvimを終了したりできます。
「通常モード」のコマンドには以下のようなものがあります。
コマンド | 説明 |
---|---|
:w | 作成・編集したファイルを保存 |
:q | vimを終了 |
:q! | 編集した内容を保存せず、vimを強制終了 |
:wq | 編集した内容を保存して、vimを強制終了 |
インサートモードは、ファイルに編集を加えることができます。
「i」キーを押すことで「insert(インサート)モード」になり、文字の入力が可能です。
ファイル編集後は、Escキーを押すと「通常モード」に戻ります。
また、ファイル編集後は、sourceコマンドを実行する必要があります。
「sourceコマンド」とは、シェルに記述された内容を実行する役割を担います。今回は、zshファイルに記述された内容を実行します。
% source ~/.zshrc
必要知識は以上です。
最後に
Basic認証は少ない工程で実装できるため、非常に便利ですが安全にはかける場合もあります。
必要最低限の認証機能を実装したい場合のみ、Basic認証を利用するようにしていきます。
環境
ruby 2.6.5
Rails 6.0.3.5
heroku 7.51.0