0

在我的 Rails 4 应用程序中,我正在创建一个 API,可以访问控制器中的indexcreateshowupdatedestroy方法。

对于身份验证,我使用带有凭据的 HTTP Basic,而不是用户名和密码(access_key = usernamesecret_key = passwordmaster_secret_key = password,用于访问某些方法)。

我希望access_key/secret_key对仅访问create, update,destroy方法和access_key/master_secret_key对以允许访问indexandshow方法(以及其他方法)。

身份验证有效,但我无法根据请求方法告诉 Rails 以哪种方式进行身份验证。

有什么建议么?

这是我到目前为止的代码:

class Api::V1::TestsController < ApplicationController
  before_filter { :authenticate! || :authenticate_with_master! }
  skip_before_filter :verify_authenticity_token
  respond_to :json

  def index
  end

  def create
  end

  def show
  end

  def update
  end

  def destroy
  end

  protected

  def authenticate!
    authenticate_or_request_with_http_basic do |access_key, secret_key|
      @credential = Credentials.find_by_access_key(access_key)
      (@credential.secret_key == secret_key) ? true : false
    end
  end

  def authenticate_with_master!
    authenticate_or_request_with_http_basic do |access_key, master_secret_key|
      @credential = Credentials.find_by_access_key(access_key)
      (@user.master_secret_key == master_secret_key) ? true : false
    end
  end
end
4

1 回答 1

2

尝试使用 before_filter 的“only”参数,并在 Rails 4 中使用 before_action

before_action :authenticate!, only: [:create, :update, :destroy]

before_action :authenticate_with_master! , only: [:index, :show]

希望它会有所帮助。谢谢

于 2013-07-23T15:13:59.220 回答