# Ошибка \`run\_second\_factor!\` при попытке повысить до администратора

**URL:** <https://meta.discourse.org/t/run-second-factor-failing-when-trying-to-promote-admin/314516>\
**Category:** Product Support\
**Created:** [01.Июль.2024 21:30:13 UTC](https://meta.discourse.org/t/run-second-factor-failing-when-trying-to-promote-admin/314516 "2024-07-01T21:30:13Z")\
**Posts on this page:** 1\
**Showing post:** 8

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [02.Июль.2024 16:13:18 UTC](https://meta.discourse.org/t/run-second-factor-failing-when-trying-to-promote-admin/314516/8 "2024-07-02T16:13:18Z")

</div>

Вздыхаю. Похоже, ошибка в `run_second_factor!` возникла из-за моих отладочных сообщений; создание багов при поиске других — одно из моих любимых занятий.

```plaintext
Started PUT "/admin/users/30591/grant_admin" for 174.50.213.142 at 2024-07-02 14:14:38 +0000
Processing by Admin::UsersController#grant_admin as */*
  Parameters: {"user_id"=>"30591"}
Completed 403 Forbidden in 6ms (Views: 0.1ms | ActiveRecord: 0.0ms | Allocations: 2263)

```

Похоже, что Guardian по какой-то причине не позволяет мне сделать пользователя администратором.

Но я всё ещё не понимаю, почему это не работает и почему выводится ошибка «An unhandled server error has occurred.», когда я не могу найти эту ошибку ни в одном из файлов кода Discourse.

Ага. И это интересно. Я смог изменить адрес с `jay@example.com` на `myaddress@gmail.com`, но попытка подтвердить адрес `myaddress+123@gmail.com` также приводит к сообщению «An unhandled server error has occurred.». Параметр `normalize_emails` не установлен.

Думаю, что проблема в `run_second_factor!`, но я пока не могу точно понять, что именно. Добавляю несколько `Rails.logger.warn` с вызовами `xxx.inspect`, возможно, так я что-то найду.

На мой взгляд, что-то не так с `auth_manager`. Кажется, он по какой-то причине пытается выполнить перенаправление? Обычным пользователям не требуется двухфакторная аутентификация, поэтому я не понимаю, почему обычный пользователь не может изменить свой адрес электронной почты. Но я пробовал с пользователем без 2FA, без резервных кодов, как вошедшим в систему до нажатия на ссылку подтверждения нового адреса, так и после входа — все попытки завершаются ошибкой «An unhandled server error has occurred.».

Это, кажется, связано с следующим:

> [@](#):
>
> После вызова этого метода менеджер аутентификации отправит ответ 403 с JSON-телом. Он делает это, выбрасывая исключение, которое затем перехватывается обработчиком `rescue_from`. JSON-ответ содержит nonce для проверки, который клиент/фронтенд должен использовать для завершения 2FA. Подробнее об этом позже.

> <https://github.com/discourse/discourse/blob/main/lib/second_factor/auth_manager.rb#L57-L60>

---

_[View the full topic](https://meta.discourse.org/t/run-second-factor-failing-when-trying-to-promote-admin/314516)._
