Add api key to every request in ActiveResource

前端 未结 7 1870
北荒
北荒 2020-12-31 01:20

I have 2 RESTful Rails apps I\'m trying to make talk to each other. Both are written in Rails 3 (beta3 at the moment). The requests to the service will require the use an ap

7条回答
  •  猫巷女王i
    2020-12-31 02:19

    Based on Joel Azemar's answer, but I had to make some changes.. First of all, in the active resource gem I used (2.3.8), there is no 'new_element_path', so aliasing that obviously failed.. Second, I updated the way the token is added to the query, because as was, it would break as soon as you add more params yourself. E.g. request for http://example.com/api/v1/clients.xml?vat=0123456789?token=xEIx6fBsxy6sKLJMPVM4 (notice ?token= i.o. &token=)

    Here's my updated snippet auth_with_api.rb;

    module ActiveResource #:nodoc:
      module Extend
        module AuthWithApi
          module ClassMethods
            def element_path_with_auth(id, prefix_options = {}, query_options = nil)
              query_options.merge!({:token => self.api_key})
              element_path_without_auth(id, prefix_options, query_options)
            end
            def collection_path_with_auth(prefix_options = {}, query_options = nil)
              query_options.merge!({:token => self.api_key})
              collection_path_without_auth(prefix_options, query_options)
            end
          end
    
          def self.included(base)
            base.class_eval do
              extend ClassMethods
              class << self
                alias_method_chain :element_path, :auth
                # alias_method_chain :new_element_path, :auth
                alias_method_chain :collection_path, :auth
                attr_accessor :api_key
              end
            end
          end  
        end
      end
    end
    

提交回复
热议问题