У меня есть приложение rails 5.1, которое использует Devise для обработки аутентификации с моей моделью User
.Это приложение имеет базу данных Oracle, которая требует установки системной переменной контекста с вошедшим в систему пользователем до выполнения каких-либо запросов, поэтому я надеялся сделать это в обратном вызове :checkout
для адаптера подключения.
class ApplicationController < ActionController::Base
before_action :log_user
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.set_callback :checkout, :after do
# Would like to get the logged-in user's username here so I can apply
# it to the oracle sys_context.
# The below throws "undefined method 'user_signed_in?'"
username = current_user.username if user_signed_in?
end
def log_user
# When in this method, user_signed_in? and current_user work fine.
puts "User is #{current_user.username}" if user_signed_in?
end
end
Метод user_signed_in?
не найден при запуске в блоке обратного вызова :checkout
, хотя он обычно доступен в контроллере.Почему?
Кроме того, current_user
в блоке, похоже, оценивает метод current_user
, определенный в ConnectionAdapter, а не метод, определенный Devise.Как я могу получить доступ к Devise current_user
?
Как я могу использовать эти предоставляемые Devise методы из этого обратного вызова?