Sorceryとは?
└Railsに認証機能の実装を行うためのライブラリで、「認証機能」とはユーザの情報を検証して、システムへのログインやユーザの有効性確認を行うための機能です。
バリデーションとは?
└オブジェクトがDBに保存される前に、そのデータが正しいかどうかを検証する仕組みのことです。事前に「○○のデータは数字のみ」「××は必須である」などのバリデーションを各モデル別に定義しておくことで、データの保存時にそれらの確認がなされ、適合しない場合には保存が出来ないような仕組みとなります。
form_withとは?
└フォーム作成を支援するツールのこと
下記のようなフォームを簡単に作ることができる


ログインのフォームに関してはモデルと紐づかない(ユーザーと紐づくと思われがちですが、あくまでも『ログイン/セッション』というリソースに紐づくという考え方)ので form_with model: @userのようにする必要はありません。フォームの送信先は/loginになって欲しいのでurl: login_pathの指定をします。
参考文献:https://school.runteq.jp/pages/37?page_category=document
⭐️sorceryで最も使うメソッド⭐️
[user_sessions_controller]
def create
@user = login(params[:email], params[:password])
login(params[:引数1],[:引数2])
def destroy
logout
redirect_to root_path
end
before_action :require_loginを書きます。before_action :require_login==特定のアクションを動かす前にログインをさせる
『ログインしていなかったらフラッシュメッセージを表示する』&『ログインしていなかったらこのページにリダイレクトをする』のような処理を書くことが一般的です
# app/controllers/application_controller.rb(全コントローラ対象)
before_action :require_login
(全コントローラ対象ファイルで記入することによって、今後全てのファイルにログインが必要か否かを記述するようになる)
private
def not_authenticated
redirect_to login_path, alert: "Please login first"
end
((#ログインしたなかったら、ログイン画面へパス)、(フラッシャメッセージも焚く。))
※applicationコントローラでbefore_action :require_loginしたら、skipしたいコントローラ内には必ず入れないと、そのページに飛ばない!!
# app/controllers/user_sessions_controller.rb
classUserSessionsController <ApplicationController
skip_before_action :require_login
defnew
end
~~~~~~
以下省略
before_actionの「onlyオプション」とは?
特定のアクションのときだけbefore_actionを使いたい場合はonlyを使います。
class PostsController < ApplicationController
before_action :set_post, only: %i[show edit update destroy]
before_actionの%記法とは?
記述するコードが減るので、可読性が上がったりタイプミスによるエラーが出る確率を減らすことができます。
# シンボル型で定義
before_action :set_message, only: %i[show edit]
# 文字列で定義
before_action :set_message, only: %w[show edit]
参考文献:https://pikawaka.com/rails/before_action
set_~~メソッドとは?
コントローラ内のアクションで重複しているものを一つにまとめるためのメソッド
class MessagesController < ApplicationController
def index
@messages = Message.all
end
def show
@message = Message.find(params[:id])
end
(※まとめた後)
def show
end
def new
@message = Message.new
end
def create
Message.create(message_params)
end
def edit
@message = Message.find(params[:id])
end
(※まとめた後)
def edit
end
def update
message = Message.find(params[:id])
message.update(message_parmas)
end
def destroy
message = Message.find(params[:id])
message.destroy
end
end
private
def set_message
@message = Message.find(params[:id])
end
・showアクションとeditアクションが同じコードで重複している。
・set_messageメソッドで二つのアクションをまとめる。
・set_メソッドでまとめたら二つのアクションを書き換える。
参考文献:https://pikawaka.com/rails/before_action
ストロングパラメータとは?
ストロングパラメーターとは指定したキーを持つパラメーターのみを受け取るようにする
特定のキーしか受け取れないような仕組みを構築することができる。
また、ストロングパラメータを使う際は、必ずprivateメソッド内で使用する。
なぜ使う必要があるのか?
投稿フォームに入力された情報はparamsによって取得されるが、その際、不正に投稿された内容がparamsに含まれているとその情報まで保存されてしまう。
それを防ぐためにストロングパラメータというものを設定しておく。ストロングパラメータを設定しておくと指定したカラムの情報だけを受け取ることができる。
ストロングパラメータの公式:
def プライベートメソッド名
params.require(:モデル名).permit(:カラム名)
end
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
def create
@post = current_user.posts.new(post_params)
if @post.save
flash[:success] = 'Post was successfully created.'
redirect_to @post
else
render :new
end
end
def post_params
params.require(:post).permit(:title, :content)
end
↓
post_paramsに入ったデータが同じクラス内のアクションの引数として代入される