【Rails】sorcery - require_login
内容
Ruby on Rails のgem 'sorcery'
の
ライブラリーメソッドrequire_login
について
ソースコード追跡
def require_login return if logged_in? # ① ログインしている場合は処理中止(Guard節) if Config.save_return_to_url && request.get? && !request.xhr? && !request.format.json? # ② request session[:return_to_url] = request.url # ③ sessionのreturn_to_urlキーにリクエストURLを格納 end send(Config.not_authenticated_action) # ④ selfを省略している? # ⑤ not_authenticated_actionについて end
① return ifによるGuard節
logged_in?がtrueの場合、
require_loginメソッドは処理されません
② request
request
が
Sorceryのソースコードの中のどこにも定義されていないと思いきや
Railsでデフォルトで定義されていました
③sessionのrequest_to_urlキーにリクエストURLを格納する
session[:request_to_url]
がいつの間に出てきましたが、
sessionのキーの名前は自由につけれるんですね
④ selfを省略している?
self.send(Config.not_authenticated_action)
の略だと思いますが、
selfの要否の判別がいまいちできていないので、よくわかりません(= =;)
⑤ not_authenticated_actionについて
send(Config.not_authenticated_action)
のsendメソッドの引数Config.not_authenticated_action
については
Sorcery::Controller::Configに書いてあります。
module Sorcery module Controller module Config class << self ... # what controller action to call for non-authenticated users. attr_accessor :not_authenticated_action ... def init! @defaults = { ... :@not_authenticated_action => :not_authenticated, ... } end
@defaults
のキー@not_authenticated_action
の値として
:not_authenticated
が定義されています。
つまり、
require_login
の中身のsend(Config.not_authenticated_action)
が
実行されたとき、
Module: Sorcery::Controller::InstanceMethods#not_authenticatedが実行されます。
def not_authenticated redirect_to root_path end
まとめ
Ruby on Railsのgem 'sorcery'
で使うことのできる
require_login
メソッドについて
・ログインしていないユーザーに対して発火します
・require_loginメソッドが発火した後、not_authenticatedメソッドが発火します。
※
・内部処理でsession[:request_to_url]
として
リクエストしたURLが保存してあるので、
not_authenticatedでログインしていないとして弾かれた後も
ログインした後、リクエストした後のURLへ遷移させる
というような実装もできそうですね
Tips
require_loginメソッドが発火した後の処理として
not_authenticatedメソッド以外を指定することも可能です。