りゅうじの学習blog

学習したことをアウトプットしていきます。

sorcery で使えるようになるCoreなメソッド

こんにちは。りゅうじです。

SorceryのGitHubのCoreなものの中から私が課題で使用したものをまとめます。

この他にも詳しいコードを知りたい方は公式GitHubをご覧ください。

sorcery での実装のやり方はこちらの過去記事をどうぞ。

https://ryujisurf55.hatenablog.com/

require_login

ログインしていないユーザーを弾きます。

アクセスしようとしたURLをセッションに格納して後述する not_authenticated を実行するメソッド。

#app/controllers/application_controller.rb

before_action :require_login

ログインしていないユーザーもアクセスできるページも必要ですよね。

今回記述した application_controller は各コントローラーの親に当たるので

他のコントローラーにも継承されています。

ログインを必要としないコントローラーには

#app/controllers/user_sessions_controller.rb

skip_before_action :require_login

として、アクション毎に変える場合は

only: %i[アクション名], の後に追記して下さい。

not_authenticated

require_login 内でこのメソッドも実行されています。

#app/controllers/application_controller.rb

protected

def not_authenticated
  redirect_to root_path
end

デフォルトはroot_path となっていますが好きに変えても良いです。

login_url に私のカリキュラムでは変更していました。

current_user

コントローラーとビューで使える。

現在ログイン中の userを返すメソッド。

logged_in?

コントローラーとビューで使える。

現在ログイン中かどうかを true か falseで返してくれるので

例えば

#どこかのview

<% if logged_in? %>
   <%= render 'パーシャルA' %>
<% else %>
   <%= render 'パーシャルB' %>
<% end %>

ログインしている⇨パーシャルAを表示

ログインしていない⇨パーシャルBを表示

redirect_back_or_to

ログインのアクションで使います。

保存されたURLがある場合そのURLに、ない場合は指定されたURLにリダイレクトする。

#app/controllers/user_sessions_controller.rb

def new; end
 
def create
 @user = login(params[:email], params[:password])
 if @user
   redirect_back_or_to root_path
 else
   render :new
 end
end

def destroy
 logout
 redirect_to root_path
end

最後に

読んでいただいた方、ありがとうございました。