В нашем приложении для нескольких арендаторов Rails 4.2 мы хотели бы определить поток локальный current_token
для модели User
и намереваться использовать его через все приложение. Вот как current_token
определяется:Насколько безопасна нить локальная в Rails?
class User < ActiveRecord::Base
def self.current_token=(token)
Thread.current['current_token'] = token
end
def self.current_token
Thread.current['current_token']
end
end
Токен извлекается с помощью User.current_token
. Жизненно важно сохранить поток User.current_token
безопасным и живым на протяжении всего сеанса пользователя. Указывается, что локальный поток может быть очищен некоторым веб-сервером, таким как puma
. Мы хотели бы получить обратную связь от сообщества о том, как звук является локальным потоком в реальном производстве. Какую проблему мы должны знать (и возможное решение, если она есть). Благодарю.
Перенос старого токена на thread.current - настоящая проблема. Если 'thread.current' очищается и перезагружается в' before_action' и очищается в 'after_action' в одном контроллере, устраняет ли он риск? – user938363
В основном, но вам также нужно подумать о промежуточном программном обеспечении. Просто посмотрите, как обрабатывает [RequestStore gem] (https://github.com/steveklabnik/request_store/blob/master/lib/request_store/middleware.rb). – spickermann
Создает ли камень RequestStore 2 проблемы в вашем сообщении? Просто хочу подтвердить. Я прочитал несколько сообщений о драгоценности OrderStore и не совсем понял, как использовать драгоценный камень. Большое спасибо. – user938363