LoginSignup
2
0

More than 3 years have passed since last update.

ログイン要求処理の実装方法(Rails・初心者向け)

Posted at

ログイン要求処理とは、ログインしていないユーザーに対して特定のページを見せないようにするための処理です。
この記事では、ログイン要求処理の実装方法を簡単に解決しています。

$ rails g helper sessionsでhelperを用意して、current_userlogged_in?を実装します。

app/helpers/sessions_helper.rb
module SessionsHelper
  def current_user
    @current_user ||= User.find_by(id: session[:user_id])
  end

  def logged_in?
    !!current_user
  end
end

def current_userは、現在ログインしているユーザーを取得するメソッドです。

@current_user ||= User.find_by(id: session[:user_id])
@current_userに現在のログインユーザーが代入されている場合 → 何もしません。
@current_userに現在のログインユーザーが代入されていない場合 → User.find_by(...)からログインユーザーを取得し、@current_userに代入します。

def logged_in?はユーザーがログインしている時はtrueを、ログインしていなければfalseを返します。

コントローラーについて考えていきます。

app/controllers/application_controller.rb
class ApplicationController < ActionController::Base

  include SessionsHelper

  private

  def require_user_logged_in
    unless logged_in?
      redirect_to login_url
    end
  end
end

ApplicationControllerに書いたメソッドは、すべてのControllerで使用できるようになります。

require_user_logged_inメソッドを定義します。
require_user_logged_inメソッドはログインの状態を確認して、ログインしていれば何もせず、ログインしていなければ強制的にログインページに戻します。
include SessionsHelperを書いた理由としては、Helperで定義したlogged_in?メソッドを使えるようにするためです。

ではrequire_user_logged_inメソッドをUsersControllerで使ってみます。

app/controllers/users_controller.rb
class UsersController < ApplicationController
  before_action :require_user_logged_in, only: [:index, :show]

  #以下省略

before_actionで指定されたindexとshowは、事前処理としてrequire_user_logged_inメソッドが実行されます。

例えばある人がusers#indexにアクセスした際に、その人がログインしいればusers#indexが見れます。
しかし、ログインしていなければログインページに飛ばされます。
このようにして、会員制のサービスなどを作ることが出来ます。
以上です。

2
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
2
0