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

authenticate_user!で書くアレと、move_to_index(じゃなくてもいいけどこの名前でよく作ってる)アレの使い途がごっちゃになっていたので整理してみたくなり。
まずは、authenticate_user!について書いてみる。

##authenticate_user!
deviseを導入していると使えるメソッド。
処理が呼ばれた段階で、そのユーザーがログインしていなければ、ログイン画面に強制的に飛ばせます(っ'-')╮=͟͟͞͞ポイッ

書く場所はApplicationController。
どのコントローラーで処理するにも共通した処理を書ける場所。
便利だなと思う反面、影響力強い×触る頻度少ないのでいつもどきどきしながら書く。

application_controller.rb
class ApplicationController < ActionController::Base
  before_action :basic_auth
  before_action :configure_permitted_parameters, if: :devise_controller?
  before_action :authenticate_user!, only:[:show, :new]    # ←ココ

  private

  def basic_auth
    xxxxx
  end

  def configure_permitted_parameters
    xxxxx
  end
end

onlyとはこのbefore_action :authenticate_user!が発動する機会を限定するもの。
この書き方だと、showアクション、newアクションの時のみauthenticate_user!が動きます。
onlyで指定するのが1つだけのときはonly: :showと書く。:と:の間スペース空けるの忘れないように。

exceptで限定することもできる。
before_action :authenticate_user!, except: :index
こんな感じ。
exceptは「コレには適用しない」というonlyと逆の使い方。
↑の場合はindexアクション以外の時はauthenticate_user!が動きます。
最初↑↑のonlyの書き方をしていたけど、今回私の作っているのはindex以外はログインしないと見れない、で良かったのでこの記事書きながら変更しましたっ。

##まとめ
・authenticate_user!でログインしていないユーザーを、ログイン画面に強制的に飛ばせる(*deviseを導入してること)
・書く場所はApplicationController
・onlyまたはexceptを使うと発動する機会を限定できる

こんな感じでしょうか!

間違ってること、もっとこうしたらいいよというアドバイスなどありましたら、コメントいただけると嬉しいです!

では、また次の投稿で。

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?