🐺

Rails gem Sorceryについて(自己学習記録)

2024/11/04に公開

Sorceyrとは

Railsgem 必要最低限の機能を備えた認証ライブラリ
有名なdeviceと異なり軽量でシンプルなため、ユーザーの少ないアプリではSorceryの方が使いやすい

インストール方法

gemファイルに以下の通り追加

gem 'sorcery'

追加した後はbundle install
次に以下のコマンドでマイグレーションファイルを生成 → データーベースの生成をする

rails generate sorcery:install
rails db:migrate

次にモデルにバリデーションの設定をしていく
以下はよくある設定

class User < ActiveRecord::Base
  authenticates_with_sorcery!

  validates :password, length { minimum: 6 },
  if: -> { new_record? || changes[:crypted_password] }
  validates :password, confirmation: true,
  if: -> { new_record? || changes[:crypted_password] }
  validates :password_confirmation, presence: true,
  if: -> { new_record? || changes[:crypted_password] }
  validates :email, uniqueness: true
end

:passwordと:password_confirmationはsorceryによって生成された仮属性
form_with等の入力フォームからの情報は仮属性に代入し、DBに保存する際は
ハッシュ化してcrypted_paswordに保存する
なお、saltと組み合わせることでランダムな文字列をcrypted_passwordに追加しており、
同じパスワードを使用しても異なるハッシュが生成されるようになっている。

ここまで出来たらあとはコントロールで認証処理を実装する

主に使用されるメソッド

  • login(params[email, password)
    ログインに成功するとsession[:user_id]も生成される
  • require_login
    before_actionでaplication.controllerに設定すればアクションごとにログインを要求できる
    なお、ログインが必要がないアクションは
    skip_before_aciton :require_login, only: %i[アクション名]で対象から外す
  • logout  セッションをリセットする
  • redirect_back_or_to
    ログインが必要なアクションにアクセスしたユーザーがログインしたら訪れようとしていた
    ページにリダイレクトできる
  • logged_in?
    ビューでログインの有無で表示を変更する際に使用する
  • current_user
    セッションに保存されているユーザーIDを使用して、対応するユーザーオブジェクトをデータベースから取得する

Discussion