こたつとみかんとプログラミング

33才実務未経験ですがウェブエンジニアにジョブチェンジするために勉強したことをアップするためのブログです。

devise で使えるメソッドとカスタマイズについて

devise を使って今アプリを作っているけれど、devise は重い gem のひとつであり導入は慎重に、、みたいな記事を見つけた。サンプルで作るにはいいけど、いざ実務で作るとなった時は一から自分で作ったほうがいいのかも。

devise で使えるヘルパーメソッドについて

(Userモデルの場合)

  • before_action :authenticate_user!
  • user_signed_in?
  • current_user
  • user_session

よく使いそうな便利なメソッドが4つ用意されている。
場合によってはカスタマイズも必要。

before_action :authenticate_user!

ログイン判定に使う。コントローラーの先頭に設置。ログインユーザーにしか実行できない処理がある場合使う。
only と併用して使うこと多い。

class ArticlesController < ApplicationController
  before_action :authenticate_user!, only: [:show]

  def index
  end

  # showのときだけ authenticate_user! が発動。
  def show
  end
end
user_signed_in?

コントローラー、ビュー問わず利用でき、 authenticate_user! より細かいログイン判定の条件分岐が可能。

current_user

現在ログインしているユーザー

user_session

ユーザーのセッション情報を設定・取得できる。
今のところ使ったことがないので使う機会があったら調べて更新する。

authenticate_user! のカスタマイズ

便利なカスタマイズ方法を見つけたのでメモ。
authenticate_user! でログインしていなかった場合、デフォルトだと new_user_session_path(/users/sign_in)にリダイレクトされてしまうが、自分でログインページを自作した場合などは、そのページに飛ばすようにしたい。
github の公式 wiki ではこちらで方法が案内されている。
けれど、上記は少し面倒なので、直接自分でメソッドを作るほうが簡単に実装できる。

before_action :authenticate

def authenticate
  redirect_to new_user_registration_url unless user_signed_in?
end

いい方法を発見できて嬉しい。