1. Ajouter une api key d’authentification dans toutes les requêtes ActiveResource pour Devise

    J’ai chercher du coté de Rack en middleware pour ajouter les paramètres d’authentification attendu par devise lorsqu’on active l’option :token_authenticatable mais malheureusement je n’ai pas réussi à les ajouter…

    Cependant j’ai trouvé une solution en surchargeant les méthodes d’ActiveResource

    Ajouter la librairie suivante dans le répertoire /lib/active_resource/extend/ ne pas oublier de dé-commenter le ligne
    "config.autoload_paths += %W(#{config.root}/lib)" dans config/application.rb

    module ActiveResource #:nodoc:
      module Extend
        module AuthWithApi
          module ClassMethods
            def element_path_with_auth(*args)
              element_path_without_auth(*args).concat("?auth_token=#{self.api_key}")
            end
            def new_element_path_with_auth(*args)
              new_element_path_without_auth(*args).concat("?auth_token=#{self.api_key}")
            end
            def collection_path_with_auth(*args)
              collection_path_without_auth(*args).concat("?auth_token=#{self.api_key}")
            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
    

    dans les modèles il faut inclure le module

    class Post < ActiveResource::Base
      include ActiveResource::Extend::AuthWithApi
    
      self.site = "http://application.localhost.com:3011/"
      self.format = :json
    
      self.api_key = 'jCxKPj8wJJdOnQJB8ERy'
    
      schema do
        string  :title
        string  :content
      end
    
    end
    

    Et le tour est joué !

     
  1. alexanderok59 aime ce billet
  2. jlstar a publié ce billet