32 lines
890 B
Ruby
32 lines
890 B
Ruby
module ApiKeyAuthentication
|
|
include ActionController::HttpAuthentication::Basic::ControllerMethods
|
|
include ActionController::HttpAuthentication::Token::ControllerMethods
|
|
|
|
extend ActiveSupport::Concern
|
|
|
|
attr_reader :current_api_key
|
|
attr_reader :current_bearer
|
|
|
|
# Use this to raise an error and automatically respond with a 401 HTTP status
|
|
# code when API key authentication fails
|
|
def authenticate_with_api_key!
|
|
@current_bearer = authenticate_or_request_with_http_token(&method(:authenticator))
|
|
end
|
|
|
|
# Use this for optional API key authentication
|
|
def authenticate_with_api_key
|
|
@current_bearer = authenticate_with_http_token(&method(:authenticator))
|
|
end
|
|
|
|
private
|
|
|
|
attr_writer :current_api_key
|
|
attr_writer :current_bearer
|
|
|
|
def authenticator(token, options)
|
|
@current_api_key = ApiKey.authenticate_by_token token
|
|
|
|
current_api_key&.bearer
|
|
end
|
|
end
|