むじんブログ ”3歩進んで2歩下がる”

37歳未経験からのエンジニア転職を目指す営業部長

学習のアウトプット(Basic認証機能)

Basic認証

HTTP通信にデフォルトで備えられている認証機能。

設定すると、ユーザー名とパスワードを知っているユーザーのみがサーバーにアクセスできるようになる。

 

ただしBasic認証は必要最低限のセキュリティなので注意。

・ログアウトの機能がない(必要であれば自身で実装しなければならない

・HTTP通信を用いるので漏洩のリスクがある

・複数のサーバーをまたいだ認証が難しい

 

--------------------------------------------------------------------------------------【authenticate_or_request_with_http_basicメソッド】

authenticateは「認証する」という意味。

Basic認証を実装するためのRuby on Railsのメソッド。

 

今回は全てのコントローラーに認証を設定するために、

application.controller.rbのprivateにメソッドを記載し、before_actionで全てのコントローラーに適用した。

 

class ApplicationController < ActionController::Base
  before_action :basic_auth


  private

  def basic_auth
    authenticate_or_request_with_http_basic do |username, password|
      username == 'admin' && password == '2222'
    end
  end
end

 

zshbash

コードに直接ユーザー名やパスワードを記載すると、Gitの公開レポジトリ上で他人に情報を見られてしまうリスクがある。

(上記のBASIC認証では、application.controller.rbをGitで見るとすぐにユーザー名やパスワードが分かる)

 

これを回避するために、これらを環境変数に入れる方法がある。

 

このとき、環境変数はシェルというプログラムを用いて

 zshbashといったログインシェルと呼ばれるファイルの中に記載する。

※ログインシェルはターミナルとOSの窓口で、プログラムを実行する時に最初にユーザーの要求に対応する役割を担う。

 

zsh

OSがCatalina以降の場合に適用されるログインシェル。

隠しファイルになっていて、Finderなどで確認することができない。

環境変数を記載するのは、.zshrcの中。

 

bash

OSがMojave以前の場合に適用されるログインシェル。

zsh同様に隠しファイルになっていて、.bash_profileに環境変数を記載する。

 

--------------------------------------------------------------------------------------

vim

サーバー上で使用できるテキストエディタで、.zshrcや.bash_profileを編集することが可能。

ターミナルからコマンドを入力することで、サーバー上のファイルに追記・編集・保存などができる。

通常モードではファイルの保存やvimの終了などが、インサートモードではファイルの編集が可能。

 

【sourceコマンド】

シェルに記載された内容を実行するコマンド。

 

--------------------------------------------------------------------------------------

【全体の流れ】

BASIC認証をコントローラーに記述した状態で、

vimbashを編集(OSの種類によってzshbashか分かれる) 

bashの場合、vim ~/.bash_profileをターミナルで実行

 

→iを押してインサートモードにして、

bashの内部にユーザー名・パス(環境変数)を記載

(元々記載がある場合は、消さずにその下に追記する)

 

→escを押して:wqを入力

→enter

→source ~/.bash_profile(sourceコマンド)を実行

 

Ruby on Rails環境変数を読み込む

コントローラーでusername ==とpassword ==としていた箇所を、下記のように修正する

username == ENV["BASIC_AUTH_USER"] && password == ENV["BASIC_AUTH_PASSWORD"]

 

→Heroku上で環境変数を読み込む

heroku config:set BASIC_AUTH_USRE="設定したいユーザー名"

heroku config:set BASIC_AUTH_PASSWORD="設定したいパスワード"

上記をターミナルで入力。

その後heroku configを実行して正しく表示されているか確認する。

 

→変更したコードをコミットしHerokuへデプロイ

git add .→git commit -m "Basic認証を導入"→git push heroku master

上記をターミナルで入力して完了。

最後にheroku上のアプリでBasic認証が導入されていることを確認する。