Можно ли использовать Rails authenticate_with_http_token с приложением Roda?
Я сделал API с Rails, который аутентифицируется с помощью authenticate_with_http_token
метод. Это работает отлично.
API использует tus-ruby-server для возобновляемой загрузки файлов. Tus::Server
это приложение Roda. Я могу использовать хуки для добавления аутентификации. Он работает внутри приложения 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
крючок?