Это старый вопрос, но все еще поднимает свою уродливую голову.Вот другой, возможно, более подходящий обходной путь, который сработал для меня.
Сначала, как другие описывают, ошибка возникает при использовании audited (ранее Act_as_audited) с devise (и, возможно, других драгоценных камней аутентификации), а затем, когда выАудит любого из столбцов, которые Devise использует в вашей пользовательской модели (last_sign_in_at, last_sign_in_ip и т. д.).
- Devise пытается аутентифицировать пользователя (используя его authenticate_user! before_filter).
- Devise пытается обновить / сохранить информацию для входа пользователя (last_sign_in_at, ip и т. Д.) Для потомков
- В рамках этого сохранения Audited затем пытается создать аудит для этого изменения.
- Audited пытается установить пользователя для этого аудита, чтобы указать, кто внес изменение.Как оно это делает?
- Проверенные вызовы current_user, метод Devise.Разработка еще не завершена с его методом аутентификации, начиная с шага 1 - Audited вмешался и делает свое дело.Итак,
- Метод current_user повторяет шаг № 1 (метод authenticate_user!), Создавая бесконечный цикл
- Ошибки вашего приложения при слишком высоком уровне стека
@Обходной путь DGM просто говорит Audited не проверять это изменение, что может сработать для вас.Тем не менее, в моем приложении мне нужно проверить это изменение.
Audited позволяет вам указать другой метод для использования current_user.
В контроллере приложения добавьте новый метод, ссылаясь на переменную экземпляра current_user .
def my_cool_method
@current_user
end
И затем в config / initializers / audited.rb укажите Audited для использования вашего нового метода:
Audited.current_user_method = :my_cool_method
С этим изменением Audited все равно будет проверять изменения, ноон не будет пытаться установить пользователя аудита (человека, который внес изменение) - это будет ноль.
Еще одно преимущество этого изменения по сравнению с альтернативным решением DGM состоит в том, что мы не переопределяем метод Devise current_user, что похоже на исправление обезьян в том, что оно может привести к непредвиденным последствиям позже.