LoginSignup
0
0

More than 1 year has passed since last update.

[Rails] Basic認証の導入法

Posted at

はじめに

ポートフォリオ作成中、投稿機能などが存在していて、むやみやたらにいたずらされても困るので、Basic認証を導入しました。そこまで難しくはないので、よかったら参考にしてください。Railsアプリに導入した方法です。

※なお、このBasic認証は、安全性の観点から完全に信頼できる方法ではないので、ポートフォリオなど最悪悪さをされても深刻な被害のないようなものにだけ実装することをお勧めします。

Basic認証とは

Basic認証はHTTP通信の規格に備え付けられているユーザー認証の仕組みです。
ユーザーとパスワードを開発者が設定しておき、webアプリケーションのurlに飛んだ時にそのユーザー名とパスワードが求められるようになります。

image.png

Basic認証の導入

Basic認証を導入するにはauthenticate_or_request_with_http_basicメソッドというメソッドを使用します。
変数名やメソッド名を名付けるのが下手くそな私がいうのもおかしいですが、このメソッドの名前は絶対ミスってると個人的には思っています。 笑

このメソッドを使ってブロックを作り、その中でusernameとpasswordを設定します。
こんな感じ↓

# 'admin'というユーザー名と、'password'というパスワードでBasic認証できるように設定
authenticate_or_request_with_http_basic do |username, password|
  username == 'admin' && password == 'password'
end

このログインの要求は全てのコントローラーに対しても行いたいのでapplication_controllerに記述します。

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 == 'admin' && password == '2222'
    end
  end
end

このように一連の処理を定義してbefore_actionで呼び出すように設定しておきます。
今回はusernameはadmin、passwordは2222 にしていますが、もちろん任意のもので構いません。
ここでgitでpushしないでください!! 

これでローカル環境で見てみるとBasic認証が導入されているはずです。
しかしながら、コードの中にusernameとpasswordの中身が書かれているとgithubから簡単に答え見られてしまうので、環境変数に設定します。

環境変数はOSがcatalina以降であれば「.zshrc」のなかに記載します。
OSがMojave以前の場合「.bash_profile」のなかに記載します。このファイルは普段は見ることができないですが、ターミナルでvimコマンドを使うことで開き、編集することが可能です。

ターミナルで実際に下記のように打ち込みコマンドを実行します。

ターミナル(macOS,Catalina以降の場合)
% vim ~/.zshrc
ターミナル(macOS,Mojaveの場合)
$ vim ~/.bash_profile

実行したら~がたくさん出てきます。これでファイルを開けました。
そこで「iキー」を押すと、一番下にINSERTと表示されます。
その状態で編集可能です。

それでは、下記の文章を書き込みます。↓

export BASIC_AUTH_USER='admin'
export BASIC_AUTH_PASSWORD='2222'

もし他に記述があれば、消さずにその下から記述を始めてください。
完了したら、「escキー」を押して、 「:wq」と入力します。
入力後、「Enterキー」を押して終了します。

最後にsourceコマンドという、先ほどの記述した内容を実行するコマンドを実行して環境変数の設定は完了です。

ターミナル(macOS,Catalina以降の場合)
% source ~/.zshrc
ターミナル(macOS,Mojaveの場合)
$ source ~/.bash_profile

さて、ここからはまたapplication_controllerの方に戻りまして、先ほどの記述を編集します。
basic_authメソッドを下記のように編集します。

app/controllers/application_controller.rb
# 省略

  def basic_auth
    authenticate_or_request_with_http_basic do |username, password|
      username == ENV["BASIC_AUTH_USER"] && password == ENV["BASIC_AUTH_PASSWORD"]  # 環境変数を読み込む記述に変更
    end
  end

これでコードを見られてもusernameとpasswordの中身が漏洩しません。pushしても安心です。
ブラウザで再度確認して変わらず導入できていれば成功です。

もしBasic認証が出てこなかったら、シークレットウィンドウで試してください。

最後に

これはあくまでローカル環境でのBasic認証となります。本番環境では、どこにデプロイしたかによって設定の仕方も変わってきますので、今後記事にかけたらなと思っています。

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