0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

デプロイ 〜ユーザー認証の導入〜

Posted at

image.png
1:ユーザー認証の導入
 デプロイしたアプリは、世界中の誰でもアクセスできる状態にあります。閲覧できるユーザーを制限するためにBasic認証を導入します。

①Basicベーシック認証
 Basic認証とは、HTTP通信の規格に備え付けられている、ユーザー認証の仕組みのことです。
 サーバーとの通信が可能なユーザーとパスワードをあらかじめ設定しておき、それに一致したユーザーのみが、Webアプリケーションを利用できるようにします。
image.png

②Basic認証をRailsアプリケーションへ導入する。
 authenticate_or_request_with_http_basicメソッドを利用して、開発中のRailsアプリケーションにBasic認証を導入します。

authenticate_or_request_with_http_basic
(オウセンティケイト オア リクエスト ウィズ エイチティティーピー ベーシックメソッド)
 RailsアプリケーションでBasic認証を実装するために使用する、Railsのメソッドです。
 ブロックを開き、ブロック内部でusernameとpasswordを設定することでBasic認証を利用できます。
【例】authenticate_or_request_with_http_basic
image.png

 Basic認証によるログインの要求は、すべてのコントローラーで行いたいです。そこで、Basic認証の処理をapplication_controller.rbのprivate以下にメソッドとして定義し、before_actionで呼び出します。

app/controllers/application_controller.rb
image.png
これで、どのページにアクセスしてもBasic認証が要求されるようになりました。

③Basic認証の動作を確認します。
 rails sをした上で、適当なページにアクセスすると、ユーザー名とパスワードの入力を求めるポップアップウィンドウが表示されます。

ターミナル(ローカル環境のアプリケーション)
% rails sを実行します。

 間違ったユーザー名とパスワードではアクセスできないことを確かめるために、あえて適当な文字を入力してみます。以下のGIFでは、ユーザー名にhogehoge、パスワードに1111と入力しています。
https://i.gyazo.com/5150d82f814a09a1a0c2626c4bae1e08.mp4

2:Basic認証のコードを改良する。
  ここまでの実装で、Basic認証をRailsアプリケーションに導入することができました。しかし、現状のコードには次の問題点があります。

◎ユーザー名とパスワードがコードに記述されている
 Basic認証をするための、adminというユーザー名と、そのパスワード2222が、コードに記述されています。つまり、GitHub上の公開リポジトリでソースコードを管理している場合、コードを読める何者かに、不正にBasic認証を突破されてしまいます。

 その対策として、コードに直接ユーザー名とパスワードを記述するのではなく、環境変数を利用する実装に切り替える方法があります。このとき、シェルと呼ばれるプログラムを用いて、環境変数を定義します。

 シェルは、簡単に言うと「ターミナルとOSを繋ぐ窓口役」のような存在です。
 ターミナルから入力されたコマンドを読み取って、OSに対して指示を渡し、結果をターミナルに返して表示や実行などの動作をさせます。

 シェルを用いて、zshと呼ばれるファイルに環境変数を定義します。

zsh(ズィーシェル)
 zshはログインシェルと呼ばれるもので、プログラムを実行する時に、ユーザーの要求に一番最初に対応する役割を担います。隠しファイルなので、特別な設定なしではFinderなどには表示されていません。
 環境変数を記載する場所は、設定ファイルである「.zshrc」の中です。

設定ファイルは、vimというコマンドを用いて編集します。

vimヴィム
 vimとは、サーバー上で使用できるテキストエディタです。vimコマンドを用いることで、指定したファイルの編集をターミナルから行うことが可能です。
以下が使用例になります。

【使用例】
ターミナル
% vim ~/.zshrc

vimには「通常モード」と「インサートモード」があります。
通常モードは、コマンドを打つことでファイルを保存したりvimを終了したりできます。

「通常モード」のコマンドには以下のようなものがあります。
①コマンド:w  説明:作成・編集したファイルを保存します。
②コマンド:q  説明:vimを終了します。
③コマンド:q! 説明:編集した内容を保存しないでvimを強制終了します。
④コマンド:wq 説明:編集した内容を保存してvimを強制終了します。

 インサートモードは、ファイルに編集を加えることができます。この場合、「i」キーを押すことで「insert(インサート)モード」になり、文字の入力が可能です。
ファイル編集後は、Escキーを押すと「通常モード」に戻ります。

ファイル編集後は、sourceコマンドを実行する必要があります。

sourceソースコマンド
 sourceコマンドとは、シェルに記述された内容を実行する役割を担います。今回は、zshファイルに記述された内容を実行します。

3:開発環境で環境変数を設定(開発環境の環境変数に、ユーザー名とパスワードを設定)
 basic_authメソッド内で直接記述しているユーザー名とパスワードを、開発環境の環境変数に格納しましょう。

以下の手順に沿って実行します。

手順①
ターミナル(ローカル環境のアプリケーション)
% vim ~/.zshrc

手順②
「iキー」を押スト、インサートモードに移行します。
ターミナルの左下に「INSERT」と表示されたら成功です。

手順③
zshの内部に、以下の記述を追加します。

ターミナル
export BASIC_AUTH_USER='admin'
export BASIC_AUTH_PASSWORD='2222'

※既にzsh内に記述がある場合は、その記述の下に「追加」してましょう。既存の記述を削除してしまうと、パソコンが正常に動作しなくなる危険性があります。

手順④
記述を追加したら「escキー」を押して、 「:wq」と入力します。
入力後、「Enterキー」を押して終了します。

※ 「escキー」を押したタイミングで、ターミナル左下の「INSERT」が消えます。消えたことを確認したら、「:wq」と入力して、「Enterキー」を押します。

手順⑤
最後に、「sourceコマンド」を実行しましょう。

ターミナル(ローカル環境のアプリケーション)
% source ~/.zshrc

 これでBASIC_AUTH_USERとBASIC_AUTH_PASSWORDという名前で、それぞれユーザー名とパスワードを定義できました。続いて、この環境変数をRailsアプリケーション側で読み込むように記述を変更します。

4: 環境変数をRailsアプリケーション側で読み込む設定
 app/controllers/application_controller.rb
image.png
→ username == ENV["BASIC_AUTH_USER"] && password == ENV["BASIC_AUTH_PASSWORD"] # 環境変数を読み込む記述に変更

これで、環境変数を使って、Basic認証を行えるユーザー名とパスワードを定義できました。

5:環境変数が反映されているか確認
「 Basic認証が現れない場合」
 Basic認証が現れないという方は、シークレットウィンドウにて確認してみましょう。通常のウィンドウでは、一定期間「Basic認証を通過した」という情報が保持されるため、その期間はBasic認証が現れなくなります。

 一方で、シークレットウィンドウはそのような情報を保持しないため、Basic認証を確認することができます。下記のGIF参照。
https://i.gyazo.com/68393611c6cdb39df8fc60fae28b7802.mp4

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?