在我的 Rails 4 应用程序中,我正在创建一个 API,可以访问控制器中的index
、create
、show
、update
和destroy
方法。
对于身份验证,我使用带有凭据的 HTTP Basic,而不是用户名和密码(access_key = username
、secret_key = password
和master_secret_key = password
,用于访问某些方法)。
我希望access_key
/secret_key
对仅访问create
, update
,destroy
方法和access_key
/master_secret_key
对以允许访问index
andshow
方法(以及其他方法)。
身份验证有效,但我无法根据请求方法告诉 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