Я создаю контрольный журнал, который должен знать, какой пользователь в данный момент делает запрос.Мой контрольный журнал построен с использованием ActiveSupport :: Notifications для получения четных данных, которые должны быть проверены.
Я хотел бы использовать ActiveSupport :: Concern для инкапсуляции логики для моих нужд аудита, чтобыЯ могу легко добавить аудит к любой модели в моей системе.
В общем, это легко сделать.Я даже писал об этом некоторое время назад .Однако мне трудно понять, как получить текущего пользователя, который делает запрос к веб-серверу, чтобы я мог регистрировать, кто делает какие изменения в моем журнале аудита.
Я знаю тамЕсть масса вопросов о том, «как получить current_user в моей модели», но я не спрашиваю об этом в модели, поэтому я надеюсь, что есть лучший набор ответов.Поскольку мой код аудита связан с инфраструктурой, я надеюсь, что есть какой-то способ, которым я могу подключиться к текущему запросу, который обрабатывается, или что-то еще, что определенно скажет мне, кто в данный момент вошел в систему / делает запрос.
Я прочитал много «ответов», в которых говорится, что нужно использовать хранилище потоков, и поместил туда current_user.Мне не нравится этот ответ по многим причинам, которые не нравятся другим - нет гарантии, что хранилище потоков безопасно.он может обрабатывать несколько запросов, если сервер использует один и тот же поток для обработки нескольких запросов и т. д.
, так что ... учитывая, что я не пытаюсь получить доступ к current_user из моей модели, а скорее из ActiveSupport:: Concern или ActiveSupport :: Уведомления о событиях, есть ли какие-нибудь хорошие варианты для меня, чтобы знать, кто является текущим пользователем?
Обновление
Я использую devise дляаутентификация, которая использует Warden на серверной части.devise извлекает current_user, вызывая request.env['warden'].authenticate(:scope => :user)
(при условии, что я использую модель "User" для аутентификации).
Могу ли я получить доступ к текущему объекту request
из моей подписки о проблеме или уведомлении?В мои дни .NET я мог звонить HttpContext.Current.Request
, и все было бы хорошо.Что такое эквивалент в Rails?