1

Rails 3.1.3アプリでHTMLまたはJSONを介してユーザーのリスト(UsersController#index)を表示したいと思います。

ログインしていない場合、HTMLリクエストはログインページにリダイレクトされ、JSONリクエストは401の無許可のヘッダーを返す必要があります。HTMLリクエストは完全に機能します。ログインしていない場合、mysite.com / usersはログインページにリダイレクトし、ログインしている場合、mysite.com/users.jsonは完全にJSONとしてレンダリングされます。

ログインしていない場合、ブラウザまたはCURL(content-typeを'application / json'に設定)のどちらでチェックしても、users.jsonにアクセスしようとすると406エラーが発生します。

ユーザーがログインしているかどうかを確認するには、認証にbefore_filterとauthlogicを使用します。つまり、before_filterを削除すると、JSONリクエストは完全に機能します。これは、問題が私のbefore_filterチェーンにあると私に思わせます:

UsersController:

before_filter :login_required, :only => [:index]

AuthenticatedSystem(ヘルパーモジュール):

def login_required
  logged_in? ? true : access_denied
end

def logged_in?
  current_user ? true : false #current_user does some authlogic authentication stuff
end

def access_denied
  respond_to do |accepts|
    accepts.html do
      store_location
      redirect_to login_path and return false
    end
    accepts.json do 
      render :json => {}, :status => :unauthorized
    end
  end
  false
end

参考までに、JSONをレンダリングすることになっているindexメソッドを次に示します。

def index
    @users = @users.active.recent.includes(:tags).page(params[:page]).per(20)

    respond_to do |format|
      format.html { get_additional_homepage_data }
      format.json { render :json => @users }
    end
end

before_filterチェーンで考えられるすべてのことを試してこれをデバッグしましたが、理解できません。何か案は?

使用:Rails 3.1.3 authlogic 3.1.0

4

0 に答える 0