У меня есть приложение rails, выступающее в качестве клиента API.Метод доступа к контроллеру класса Ruby
Как только пользователь заходит, маркер сохраняется для отправки с каждым последующим запросом API.
Вот мой код (действительно упрощенно):
# /lib/api_client.rb
class ApiClient
def get(path, options = {})
# options.merge! headers: {'Authorization' => 'Token mytoken'}
HTTParty.get("http://api.myapp.com/#{path}", options)
end
end
# /app/models/user.rb
class User
def self.exists?(id)
api.get("users/#{id}").success?
end
def self.api
@api ||= ApiClient.new
end
end
# /app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
def signed_in?
current_auth_token.present?
end
def current_auth_token
cookies.signed[:user_token]
end
end
Моя проблема заключается в том, что ApiClient
может t access the
ApplicationController so it has no way to know if there is an
auth_token` или нет.
Теперь, что было бы лучшим способом автоматически добавить заголовок Authorization
, содержащий current_auth_token
, на каждый следующий звонок до ApiClient#get
?
Еще одно решение, которое я хотел бы инициализировать в контроллере ApiClient
, тогда я мог бы просто сделать что-то вроде api_client.auth_token = 'mytoken'
. Но тогда есть ли подходящий способ получить доступ к нему из модели?