Я создал API с Rails, который аутентифицируется с использованием метода authenticate_with_http_token
.Это работает отлично.
API использует tus-ruby-server для возобновляемой загрузки файлов.Tus::Server
- это приложение Roda.Я могу использовать hooks для добавления аутентификации.Он работает внутри приложения Rails (его конечные точки смонтированы в routes.rb
).
Rails уже предоставляет authenticate_with_http_token
, которая является очень хорошо разработанной реализацией для аутентификации через токены.Можно ли каким-то образом использовать этот метод в приложении Roda внутри этих хуков?
Пока что мне это не удалось, и я прекратил реализовывать более простой способ чтения заголовка и синтаксического анализа токена, который оставил меняс ощущением, что я слишком многократно реализовал что-то, уже предоставленное Rails, и что решение, которое я сделал, гораздо менее надежно из того, что уже предоставляет Rails.
Я попытался включить метод Rails таким способом.
# config/initializers/tus.rb
Tus::Server.before
extend ActionController::HttpAuthentication::Token::ControllerMethods
authenticate_with_http_token { |token| User.find_by(token: token) }
end
Но в конечном итоге с этой ошибкой.
NoMethodError: undefined method `authorization' for #<Tus::Server::RodaRequest:0x00007f9fe3b48450>
Рода-запрос не распознает ActionDispatch::Request#authorization
, называемый здесь .Я застрял здесь, так как не понимаю, как возможно добавить методы ActionDispatch в объект RodaRequest
.
Возможно, мне не хватает чего-то очевидного, но пока я этого не вижу.
Мне не хватает чего-то более фундаментального, чтобы метод authenticate_with_http_token
работал внутри хука Tus::Server
?