Orchard的忘记密码返回302并重定向

时间:2015-06-17 14:28:16

标签: orchardcms orchardcms-1.8

尝试在Orchard.Users中的帐户控制器上发布“丢失密码”操作时,我们遇到了一些奇怪的行为。

重要细节

  • 我们没有直接使用Orchard源代码,我们正在使用已部署到redist主机的已编译的可重新分发和构建模块,因此直接调试是一项挑战。
  • 我们已尝试使用vanilla Orchard 1.8.1(我们的redist版本),因此我们几乎可以删除任何模块的代码。
  • 在发布表单时,我们会返回 302 Moved 响应,并将 Location Header 设置为/。然后,这将最终到root而不是Success页面或返回Enter New Details密码。用户的密码未成功更改。
  • 查看源代码中的Account Controller,显示唯一明确返回root的结果是当调用 IUserService.ValidateLostPassword(nonce)失败并且返回Redirect(&#34)时;〜/"); 被调用。
  • 看到直接调试有点复杂,我们从源代码获取了Controller的副本,并将动作代码和所有相关的服务调用逻辑移动到Orchard命令中进行测试。这成功地改变了用户的密码。并使用从重置电子邮件中捕获的NOnce毫无错误地返回。

所以我们怀疑这可能是Orchard本身的一个错误,虽然更可能是我们的实例和它的配置看到"无法更改密码"是一个非常广泛的问题。

有人提出任何建议吗?可能适用的已知错误?

更新1:

谢谢Bertrand。我们还没有尝试使用Orchard 1.9,但确实设法得到一个完全干净的1.8(因为这是我们目前在我们的一个回购中使用的版本.PS你是否知道你的GitHub repo braches去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">
一切都很好,花花公子。我认为因为nonce作为get的查询参数进入,所以在调用默认的Begin Form时通过推理将其保留到帖子中,而不需要任何其他设置。

但是,我们的覆盖当前使用:

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

在这里,我们为主题的需要和我们获得的页面指定了一些额外的类:

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

nonce已经消失(或者更确切地说,因为我们指定了特定的路线,所以没有添加)。所以现成的解决方案是使用

添加随机数
Action(String, String, Object)

Url.Action()的形式,将其指定为路线值。

但是,nonce不会作为Model上的成员或ViewBag(如最小密码长度)传递。

我在Orchard 1.6 / 1.7时发现了这个this之前的问题,建议更新控制器以将nonce添加到Viewbag中,但是我们正在使用Orchard的预编译重新设置,因此这个问题更少非常适合我们的需求。

我将使用我们可用的内容编写该表单的其他方式,而无需更新Controller,但有没有计划将nonce用于此视图以供使用?

0 个答案:

没有答案