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.

RailsアプリにBasic認証を実装する

Posted at

Basic認証とは

HTTP通信に元々備えられているユーザー認証の仕組み。
あるアプリケーションに利用可能なユーザー名とパスワードをあらかじめ設定しておき、ユーザーが利用しようとした際設定していたユーザー名とパスワードを入力させてログインできるようにする機能。要するに個別のパスワード設定ではなく全員に共通したパスワードでログインさせるようなこと。Railsで作成したアプリにBasic認証を導入するのは比較的簡単にできるようなので試してみたいと思います。

Basic認証を実装するメソッド

Railsにはbasic認証を実装する’authenticate_or_request_with_http_basic’というメソッドが用意されているので、それを使ってbasic認証を実装してみたいと思います。

ベーシック認証が成功したらトップページに

スクリーンショット 2022-02-16 10.50.42.png

と表示されるようにします。

authenticate_or_request_with_http_basicの記述

authenticate_or_request_with_http_basicメソッドはコントローラーに記述し、各アクションを実行する前のbefore_actionとして実装します。

class ApplicationController < ActionController::Base
  before_action :basic_authentication
  
  private
  
  def basic_authentication
    authenticate_or_request_with_http_basic do |user_name, password|
      user_name == 'hoge' && password == 'huga'
    end
  end
end

localhost:3000にアクセスしてみます。すると、
スクリーンショット 2022-02-16 11.02.31.png

このような画面が表示され、ユーザー名とパスワードの入力を求められます。

ユーザー名とパスワードを入力してログインボタンを押すと...

スクリーンショット 2022-02-16 10.50.42.png

認証に成功し、トップページが表示されました!めちゃくちゃ簡単!

認証範囲を限定することもできる

先ほどの例では全てのアクションにBasic認証が効く設定にしましたが、ある特定の範囲(ページ)に効果を限定することができます。「このページは誰でも見れていいけど、ここから先は特定の人にしか見せたくない」ような場合に有効かと思います。

・indexページ
スクリーンショット 2022-02-16 11.42.25.png

・showページ
スクリーンショット 2022-02-16 11.46.00.png

・tasks_controller.rb編集

tasks_controller.rb
class TasksController < ApplicationController
  before_action :basic_authentication, only: :show # showアクションにだけベーシック認証をかける
  
  def index; end
  
  def show; end
  
end

このように実装すると、showアクションにだけベーシック認証をかけられるようになります。

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?