AuthLogicを使用したコンテンツの保護
-
22-07-2019 - |
質問
これは本当に簡単なユースケースのように聞こえますが、そうであることを望んでいますが、私はあちこちを見て、どんな方法も言及していないことを誓います-最高のものでさえありません方法-これを行う。
私は、Ruby、Rails、およびそれらを取り巻くすべてに新しいブランドを広げています(ロットを説明するかもしれません)。私が学習ツールとして使用しているダミーアプリでは、ほとんど何でも意味のあることを行うために認証が必要なので、その問題を解決することから始めることにしました。 AuthLogic gemをインストールし、イントロマニュアルとRailscastでカバーされている範囲でうまく動作していますが、登録、ログイン、ログアウトができるようになりました...それで何かする必要があります。
例として、ユーザーが画像をアップロードできるページを作成する必要があります。 upload
アクションメソッドを含む ImagesController
を使用する予定ですが、ログインしたユーザーのみがアクセスできるようにします。 current_user
がない場合、すべての制限されたアクションでリダイレクトするコードを追加できると思いますが、それは本当に冗長に思えます。
制限領域を定義または識別し、1か所で認証チェックを処理できるようにするより良い方法はありますか?
解決
application_controller.rbにこれらのメソッドがあることを確認してください
def current_user_session
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.record
end
def require_user
unless current_user
store_location
flash[:notice] = "You must be logged in to access this page"
redirect_to new_user_session_url
return false
end
end
コントローラーで、beforeフィルターを使用してページへのアクセスを制限できます
class ExamplesController < ActionController::Base
before_filter :require_user, :only => :private
def public
// some public stuff
end
def private
// some protected stuff
end
end
他のヒント
before_filterはここであなたの友達です。有効なセッションがない場合にfalseを返すrequire_authentication関数を定義し、好みのコントローラーとアクションでbefore_filterとして設定します。
application_controller.rb を使用し、必要な場所で使用します(たとえば、こちら。アカウントを破棄するためにログインする必要があり、新しいアカウントを作成するためにログに記録する必要はありません。
ログインしているユーザーのみが表示できるように、ページでbefore_filterを使用する必要があります。 authlogicの使用方法(before_filterを含む)の実行例が必要な場合は、 GithubのAuthlogic Exmaple 。
GithubでコードGist全体を入手できます。約360行のコード。手順を含む。