はじめに
deviseを導入した際に使えるようになる、便利なヘルパーメソッドについて、備忘録として投稿します。
deviseとは
ユーザーの新規登録、ログイン、ログアウトなど、認証に必要な機能を追加することができるgemです。
deviseの導入方法について
【参照】
https://qiita.com/cocoa-engineer/items/625da569fcac1ad2db1f
deviseのヘルパーメソッド
deviseを導入すると、以下の機能が使えるようになります。
メソッド | 機能 |
---|---|
before_action :authenticate_user! | ログイン済ユーザーのみにアクセスを許可する |
current_user | 現在ログインしているユーザーを取得する |
user_signed_in? | ユーザーがサインインしているかどうかを判定する |
user_session | ユーザーのセッション情報にアクセスする |
※「user」の部分はモデル名になるので、モデル名に応じて「user」部分を書き換えてください。
各ヘルパーメソッドの使い方については、以下のとおりです。
before_action :authenticate_user!
特定のアクションを、ログイン済みユーザーでないとアクセスできないようにするため、以下のようにコントローラ内に設定します。
※ログインしていない場合は、ログインページにリダイレクトされます。
class SampleController < ApplicationController
before_action :authenticate_user!, only: [:show]
def index
end
def show
end
end
このようにonlyを使うと、showアクションはログイン済みユーザーのみアクセス可能とし、indexアクションはログインしていなくてもアクセスできるようになります。
また、以下のように、exceptを使っても同じことが書けます。
class SampleController < ApplicationController
before_action :authenticate_user!, except: [:index]
def index
end
def show
end
end
current_user
現在ログインしているユーザーを取得できます。
idを取得する際は、「current_user.id」で取得できます。
<%= link_to "プロフィール", user_path(current_user.id) %>
user_signed_in?
ビュー等でcurrrent_userを使うと、ログインしていない場合エラーになってしまうので、このメソッドを使って条件分岐します。
<% if user_signed_in? %>
<%= render 'layouts/login_user_header' %>
<% else %>
<%= render 'layouts/no_login_user_header' %>
<% end %>
user_session
ユーザーのセッション情報にアクセスできます。
参考サイト
https://qiita.com/tobita0000/items/866de191635e6d74e392
https://qiita.com/k4ssyi/items/3edcd0e5373a41677dee