0
1

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】

Posted at

目的

SNSサイトにて、ログインの有無でアクセス制限したいときの処理をメモにまとめます。

サイト構成

作成したサイトの構成は下記です。

routes.rb
# ログイン中はアクセス制限
get "/" => "users#login_form"
post "/login" =>"users#login"
get "/new" => "users#new"
post "/users/create" => "users#create"

# ログアウト中はアクセス制限
get "/edit/:id" => "users#edit"
post "/users/update/:id" => "users#update"
post "/logout" => "users#logout"

current_userの準備

ログイン中のユーザーを@current_userで定義します。
これは全てのコントローラで使用する変数なので、application_controllerで定義し、before_actionに設定します。

application_controller.rb
before_action :set_current_user

def set_current_user
  @current_user = User.find_by(id: session[:user_id])
end

ここで定義した@current_userapplication_controller内の別の定義式内でも使用可能です。

ログインしてない時のアクセス制限

application_controller.rb
def authenticate_user
  if @current_user == nil
    flash[:notice] = "ログインが必要です"
    redirect_to("/")
  end
end

users_controllerで適応させるアクションを指定します。

users_controller.rb
before_action :authenticate_user, {only: [:edit, :update, :logout]}

ログインしている時のアクセス制限

application_controller.rb
def forbid_login_user
  if @current_user
    flash[:notice] = "すでにログインしています"
    redirect_to("/shops/index")
  end
end

users_controllerで適応させるアクションを指定します。

users_controller.rb
before_action :forbid_login_user, {only: [:login_form, :login, :new, :create,]}

まとめ

ログインの有無でアクセス制限をかける方法をまとめました。
before_actiononlyを指定しなければ全てのアクションに対して実行されます。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?