質問

これは本当に簡単なユースケースのように聞こえますが、そうであることを望んでいますが、私はあちこちを見て、どんな方法も言及していないことを誓います-最高のものでさえありません方法-これを行う。

私は、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行のコード。手順を含む。

http://gist.github.com/96556.txt

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top