Edited at

会員向けのコンテンツのLogin確認まわりを実装してみる

More than 3 years have passed since last update.


会員向けコンテンツの前にログインさせたい

メンバー向けのコンテンツの前にログインをはさみたいのですが、そのあたりを継承をつかって実装してみました。

また使う機会がありそうなのでメモを残しておきます。

例えば下記のような感じです。

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


読みやすさを考えると設定などに会員向けとそうじゃないページをまとめてそこで制御したほうがいいような気がします。

ただエンジニア的にはクラスファイルを一目みただけでコンテンツが会員向けであることがわかるので、

対応はしやすいと思います。

何かよりよい方法があればコメントお願いします。