406不可接受在Rails上访问JSON时出错

时间:2012-04-23 07:34:09

标签: json ruby-on-rails-3.1 authlogic

我想在我的Rails 3.1.3应用程序中通过HTML或JSON显示用户列表(UsersController #index)。

如果未登录,HTML请求应重定向到登录页面,JSON请求应返回401未经授权的标头。 HTML请求完美无缺。未登录时,mysite.com / users会重定向到登录页面,登录后,mysite.com / users.json完全呈现为JSON。

当没有登录时,我在尝试访问users.json时遇到406错误,无论是通过浏览器还是通过CURL检查(将内容类型设置为'application / json')。

要检查用户是否已登录,我使用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的索引方法:

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

0 个答案:

没有答案