会員向けコンテンツの前にログインさせたい
メンバー向けのコンテンツの前にログインをはさみたいのですが、そのあたりを継承をつかって実装してみました。
また使う機会がありそうなのでメモを残しておきます。
例えば下記のような感じです。
MemberContentsControllerを継承していれば表示前にログインチェックがはしり、
ログイン後にページを表示するといった動きです。
下記のような感じで実装したい。
class MymgController < MemberContentsController
def index
end
def show
end
def menu
end
end
会員向けコンテツの場合はログイン有無を確認
もしログインしてなければログインページ遷移、といった動きをいれます。
このコントローラを会員向けのコントローラに継承さることでそのコントローラに遷移前にログイン状態を確認させています。
member_contents_controller
class MemberContentsController < ApplicationController
before_action :checkLogin
def checkLogin
#helperでログインチェック
if !view_context.login?
session[:member_contents_path] = request.fullpath
return redirect_to login_url
end
end
end
ログイン後に戻るページを取得する。
トップページからもログインさせたいので大元のコントローラのフィルタで戻りパスを取得します。
appication_controller
class ApplicationController < ActionController::Base
before_action :getPath,:authenticate_user
def getPath
session[:member_contents_path] = request.fullpath
end
ただしLoginページに関してはそこに戻したくないので、
除外します。
他に同様のページがあれば同じ対応をします。
LoginController
class LoginController < ApplicationController
def getPath
#何もしない
end
def in
path = session[:member_contents_path]
#保存したパスがあれば
if path.blank?
redirect_to root_path
else
session[:member_contents_path] = nil
redirect_to path
end
end
end
読みやすさを考えると設定などに会員向けとそうじゃないページをまとめてそこで制御したほうがいいような気がします。
ただエンジニア的にはクラスファイルを一目みただけでコンテンツが会員向けであることがわかるので、
対応はしやすいと思います。
何かよりよい方法があればコメントお願いします。