1

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

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

未登录时,尝试访问 users.json 时出现 406 错误,无论是通过浏览器还是通过 CURL 检查(将内容类型设置为“应用程序/json”)。

为了检查用户是否登录,我使用 before_filter 和 authlogic 进行身份验证。问题是,如果我删除 before_filter,JSON 请求就会完美运行。这让我觉得问题出在我的 before_filter 链中:

用户控制器:

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