LoginSignup
6
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-10-21

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

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

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

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

読みやすさを考えると設定などに会員向けとそうじゃないページをまとめてそこで制御したほうがいいような気がします。
ただエンジニア的にはクラスファイルを一目みただけでコンテンツが会員向けであることがわかるので、
対応はしやすいと思います。

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

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6