gpt4 book ai didi

asp.net-mvc - 即使使用AllowAnonymous,SimpleMembership 密码重置超链接 401 也会重定向

转载 作者:行者123 更新时间:2023-12-02 18:05:37 30 4
gpt4 key购买 nike

我正在尝试将 MVC4 应用程序从 ASP.NET Membership 迁移到新的 SimpleMembership,但遇到了密码重置的问题。在我的登录 View 中,我有“忘记密码”超链接,该超链接执行 AJAX 发布操作,发送带有重置密码超链接的电子邮件(大致基于 MSDN guidelines ):

[HttpPost]
[AllowAnonymous]
public ActionResult ForgotPassword(string userName)
{
//get the user from database, validate it exists, etc.
var token = WebSecurity.GeneratePasswordResetToken(userName);
var resetLink = "<a href='" + Url.Action("ResetPassword", "Account", new {un = userName, rt = token}, "http") + "'>Reset Password</a>";
//send the email
return Json(new {result = "Email sent."});
}

这工作正常,但由于某种原因,当我尝试使用“重置密码”链接时,我被重定向到登录屏幕,并且 Fiddler 显示 401-未经授权。我尝试将链接复制/粘贴到浏览器地址栏中,并创建一个包含 anchor 标记的垃圾 HT​​ML 文件,但结果仍然是 401。 这是重置密码操作(也在帐户 Controller 中) MVC4模板):

[HttpPost]
[AllowAnonymous]
public ActionResult ResetPassword(string un, string rt)
{
var model = new ResetPasswordViewModel {UserName = un, ResetToken = rt};
return View(model);
}

我也尝试删除 HttpPost 属性,但这也会产生 401。我在这里缺少什么?

更新
感谢 Steve 的评论,我完全限定了 HttpPost 属性,并且现在意识到它正在尝试发布到某个区域,而不是直接发送到根 Account Controller 。使用RouteDebugger ,我看到资源未找到错误:

Matched Route: {controller}/{action}/{id}
Generated URL: /SiteRoot/Reports/Account/ResetPassword?un=whatever&rt=removedForSecurity using the route "Reports/{controller}/{action}/{id}"

请注意,它正在查看Reports 区域。因此,我更改了 ForgotPassword 操作中的 anchor 标记构造,在路由值对象中添加 Area 规范,如下所示:

var resetLink = "<a href='" + Url.Action("ResetPassword", "Account", new {un = userName, rt = token, Area = ""}, "http") + "'>Reset Password</a>";

但它仍在尝试使用报告区域。如何确保电子邮件中的 anchor 标记将定向到网站根目录而不是某个区域?

更新2
我删除了 HttpPost 属性,现在得到了原始的 401 重定向。

更新3ResetPassword查看代码:

@model Whatever.Web.Models.ResetPasswordViewModel
@{
ViewBag.Title = "Reset Password";
}
@using (Html.BeginForm())
{
<fieldset>
<legend>Reset Password</legend>
<table>
<tr>
<td>User name:</td>
<td>@Html.TextBoxFor(m => m.UserName, new { @class="disabled-textbox", @readonly="readonly", autocomplete="off" })</td>
<td></td>
</tr>
<tr>
<td>New Password:</td>
<td>@Html.PasswordFor(m => m.NewPassword, new { id = "resetPasswordNewPassword" })</td>
<td></td>
</tr>
<tr>
<td>Confirm New Password:</td>
<td>@Html.Password("resetPasswordConfirmPassword", "", new { id = "resetPasswordConfirmPassword"})</td>
<td>
<div id="passwordsMatch"></div>
</td>
</tr>
</table>
<input type="submit" id="submitButton" value="Submit" disabled="disabled"/>
<div id="resetPasswordResultDiv"></div>
</fieldset>
}
<script type="text/javascript">
$(document).ready(function() {
$("#resetPasswordNewPassword, #resetPasswordConfirmPassword").keyup(function() {
if ($("#resetPasswordNewPassword").val().length > 0 && $("#resetPasswordConfirmPassword").val().length > 0 && $("#resetPasswordNewPassword").val() != $("#resetPasswordConfirmPassword").val()) {
if ($("#resetPasswordNewPassword").val() != $("#resetPasswordConfirmPassword").val()) {
$("#passwordsMatch").html('<span style="color: red; font-weight: bold;>Passwords do not match</span>');
$("#submitButton").attr('disabled', true);
} else {
$("#submitButton").removeAttr('disabled');
}
} else {
$("#passwordsMatch").html('');
$("#submitButton").attr('disabled', true);
}
});
});
</script>

更新4
我尝试向帐户 Controller 添加另一个操作方法,从而产生“hello world”样式 View 。当然,添加了 [AllowAnonymous] 属性。此方法会导致 401 重定向到登录。

最佳答案

我认为您的设置方式没有任何问题。这里肯定还有其他事情发生。检查您的 _Layout.cshmtl 文件并确保您没有调用任何可能导致 401 的其他操作。

这个人也有类似的问题:https://stackoverflow.com/a/11046666/199913

关于asp.net-mvc - 即使使用AllowAnonymous,SimpleMembership 密码重置超链接 401 也会重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14463654/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com