Ruby on Railsの認証 - 独自の認証ロジックを組み込む

アプリケーションを作っていると、要件を満たすために
独自のロジックでユーザー認証を行うことがあるかと思います。

今回は、Ruby on Railsに独自の認証ロジックを組み込む方法について
書きたいと思います。

とは言っても、非常に簡単です。
(簡単すぎて感動して、この記事を書こうと思ったくらいです。)


1.Applicationコントローラに、認証メソッドを作成する
全てのコントローラから呼び出し可能なApplicationコントローラに
独自の認証ロジックを持つメソッドを作成します。

application_controller.rb


class ApplicationController < ActionController::Base
include ApplicationHelper

protect_from_forgery

def authorize
# 独自の認証ロジックを、ここに記述する。
redirect_to login_url, alert: "認証されていません" if current_user.nil?
end
end

authorize()メソッドが、作成したロジックです。
今回は別に定義したcurrent_user()を呼び出し、認証済みのユーザーかどうかをチェックしているだけですが
ここに複雑な認証ロジックを組み込むことも可能です。


2.コントローラに、認証を必要とする画面を定義する
before_filterを使い、指定した画面の表示時に、認証ロジックを通します。

home_controller.rb


class HomeController < ApplicationController
before_filter :authorize, only: [:edit]

def index
end

def edit
end
end

before_filter〜の一行で、edit画面のみ、表示前にauthorize()メソッドが
実行されるように定義しています。


ソースはこれだけです。
では、試しにアプリを動かしてみます。

・認証が必要な/home/editにアクセスしてみると・・・
f:id:UnderSourceCode:20130421102751j:plain

・ログインページにリダイレクトされる。
f:id:UnderSourceCode:20130421103211j:plain

・ログイン後に、再度/home/editにアクセスすると・・・
f:id:UnderSourceCode:20130504094355j:plain

・/home/edit画面が表示される。
f:id:UnderSourceCode:20130421103930j:plain


以上です。before_filterを使い、非常に簡単にできることが分かるかと思います。