Потерянный пароль Orchard возвращает 302 и перенаправляет

Мы наблюдаем странное поведение при попытке POST для действия «Забыли пароль» в контроллере учетных записей в Orchard.Users.

Важные детали

  • Мы не используем исходный код Orchard напрямую, мы используем скомпилированные повторно распространяемые и сборочные модули, которые развертываются на хосте Redist, поэтому прямая отладка является проблемой.
  • Мы попробовали это с ванильным Orchard 1.8.1 (версия нашего Redist), так что мы можем почти исключить любой код нашего модуля.
  • При отправке формы мы получаем ответ 302 Moved с заголовком местоположения, установленным на /. Затем это приводит к root, а не к странице «Успех» или обратно к вводу нового пароля. Пароль пользователя не был успешно изменен.
  • Глядя на Контроллер учетных записей в исходном коде, мы видим, что единственный результат, который явно возвращает корень, — это когда вызов IUserService.ValidateLostPassword(nonce) терпит неудачу и return Redirect("~/"); вызывается.
  • Поскольку прямая отладка немного сложна, мы получили копию контроллера из исходного кода и переместили код действия и всю связанную логику вызова службы в команду Orchard для тестирования. Это удалось изменить пароль пользователя. и возврат без ошибок, используя NOnce, полученный из электронного письма сброса.

Таким образом, мы подозреваем, что это может быть ошибка в самом Orchard, хотя, скорее всего, в нашем экземпляре, и его конфигурация, поскольку «Невозможно изменить пароль», является довольно обширной проблемой.

Кто-нибудь может дать совет? Известные ошибки, которые могут применяться?

Обновление 1:

Спасибо, Бертран. Мы еще не пробовали это с Orchard 1.9, но нам удалось получить полностью чистую версию 1.8 (поскольку это версия, которую мы в настоящее время запускаем в дикой природе с одним из наших репозиториев. P.S. Знаете ли вы, что ваш репозиторий GitHub идут ветки 1.4.x, 1.5.x, 1.9.x? 1.8.x недоступна. Во всяком случае.) и это работал. Краткая версия: мы поигрались с тем, что может быть по-другому, и мы пришли к тому, что это работает, когда наша тема выключена, и не работает, когда она включена.

Небольшое копание показало, что наши ребята из FE перезаписали представление «Потерянный пароль», чтобы оно соответствовало нашему деловому виду. Вот что я нашел:

В представлении Orchard по умолчанию форма запускается с помощью:

@using (Html.BeginFormAntiForgeryPost()) { 

и в итоге выглядит как

<form action="/OrchardLocal/Users/Account/LostPassword?nonce=Vc7ABvKcwfMO0jrRkJFxiBWoJzbdGAqQ7bbEgGySqlyAAKnHPTIkyhzG8nn%2FXJsqKkh6e9sreTnHx223BKFOs17gY%2FDWMggtCZw%2BSfz194Mviua5smhl5d%2FnACXCI%2BrdQaGcJj%2BjvoFE7m2OIiaX8w%3D%3D" method="post">

все хорошо и денди. Я предполагаю, что, поскольку одноразовый номер вошел в качестве параметра запроса при получении, он сохраняется в сообщении посредством вывода при вызове формы «Начало» по умолчанию без каких-либо дополнительных настроек.

Однако наше переопределение в настоящее время использует:

@using (Html.BeginFormAntiForgeryPost(Url.Action("LostPassword"), FormMethod.Post, new{ @class="form-lost-password"} ) ) {

Здесь мы указываем какой-то дополнительный класс для нужд нашей темы и на странице получаем:

<form action="/Users/Account/LostPassword" class="form-lost-password" method="post">

Нонс исчез (точнее, вообще не добавился, т.к. мы указываем конкретный маршрут). Таким образом, готовое решение — добавить одноразовый номер при использовании

Action(String, String, Object)

форму Url.Action(), чтобы указать его как значение маршрута.

Однако одноразовый номер не передается ни как член модели, ни через ViewBag (как минимальная длина пароля).

Я нашел этот этот предыдущий вопрос со времен Orchard 1.6/1.7, который предлагает обновление контроллера, чтобы добавить одноразовый номер в Viewbag, но мы используем предварительно скомпилированный повторный дистрибутив Orchard, поэтому это далеко не идеально для наших нужд.

Я буду использовать другие способы написания этой формы, используя то, что у нас есть, без обновления контроллера, но есть ли какой-либо план сделать одноразовый номер доступным для этого представления для использования?


person Kira Namida    schedule 17.06.2015    source источник
comment
Вы пытались воспроизвести с исходным кодом? С более свежей версией? SSL включен?   -  person Bertrand Le Roy    schedule 18.06.2015
comment
Обновление 1 добавлено к исходному вопросу   -  person Kira Namida    schedule 18.06.2015
comment
Ветки 1.8.x нет, потому что не ведется постоянная разработка новых версий под 1.8. 1.4.x и 1.5.x не должны существовать.   -  person Bertrand Le Roy    schedule 18.06.2015
comment
Вы пытались добавить параметр nonce в параметры действия, получая его значение из запроса?   -  person Bertrand Le Roy    schedule 18.06.2015
comment
Нет, так как мы используем не исходную версию Orchard, а предварительно скомпилированную версию. Мы стараемся избегать каких-либо настроек кодовой базы Orchard и просто работаем с ванильными выпусками, чтобы не привязываться к повторной интеграции с каждым новым выпуском. Особенно с недавно вышедшей версией 1.9. Мы могли бы взять это из HttpContext, но это кажется нам очень тяжелым. Есть ли особая причина, по которой NOnce не доступен для формы LostPassword? Он находится в параметре запроса, поэтому он не видит необходимости его скрывать или что-то в этом роде.   -  person Kira Namida    schedule 19.06.2015
comment
Использование исходного кода не означает внесение изменений в ядро ​​(хотя вас поощряют делать это, если они являются законными изменениями и вы их вносите), речь идет о возможности отладки в полном контексте, возможности изучения передового опыта и т. д. Я пытался дать вам обходной путь, так как вы сказали, что у вас нет исходного кода и вы не хотите его трогать. Если вы не хотите использовать этот обходной путь, я думаю, что у вас есть единственный другой вариант — получить исходный код и исправить его или зарегистрировать ошибку и ждать, пока кто-нибудь ее исправит.   -  person Bertrand Le Roy    schedule 20.06.2015