Можно ли использовать 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 крючок?

0 ответов

Другие вопросы по тегам