🐺
Rails gem Sorceryについて(自己学習記録)
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