こんにちは。りゅうじです。
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
最後に
読んでいただいた方、ありがとうございました。