0

サインインしたユーザーのみがアクセスできるようにしたいルートがたくさんあるとします。次の行に沿って何かを言うコントローラーメソッドのそれぞれにチェックを入れることができます

if signed_in?
    #do stuff here
else
    redirect_to root_path

before_filterコントローラーで a を使用して、それを書き換える必要がある回数を減らすこともできると思います(ただし、構文についてはあまり詳しくありません)。ただし、理想的には、特定の正規表現に一致するすべてのルートがこのチェックを通過する必要があることを1か所に書き留めておきたいと思います。たとえば、フォームのすべてのルートはwww.mysite.com/admin/...この検証チェックが必要です。これを行う方法はありますか?このチェックを一度だけ記述し、コントローラー間でコードを複製する必要はありませんか?

4

1 に答える 1

0

コントローラー内の現在の URL を取得する方法を示す投稿を見つけました: How can I find the current route in Rails?

ApplicationControllerこれで、URL が で始まるかどうかをチェックし/admin、ユーザーがサインインしているかどうかを検証するメソッドを記述できbefore_filterますApplicationController。. 現在、このメソッドはすべてのリクエストの前に呼び出されますが、最初に正規表現をチェックするため、で始まらないページには影響しません/admin

おそらく次のようになります。

class ApplicationController < ActionController::Base
  before_filter :check_login_if_admin_route

  def check_login_if_admin_route
    current_uri = request.env['PATH_INFO']
    if !current_uri.start_with?('/admin')
      redirect_to root_path
    end
  end
end
于 2013-07-07T20:33:10.807 に答える