asp.net-mvc – 即使使用AllowAnonymous,SimpleMembership密码重
我正在尝试将我的MVC4应用程序从ASP.NET成员资格迁移到新的SimpleMembership,并且遇到了密码重置问题.在我的登录视图中,我有“忘记密码”超链接,它发送一个
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-Unauthorized.我已经尝试将链接复制/粘贴到浏览器地址栏中,并创建一个带有锚标记的垃圾HTML文件,但结果仍然是401.这是重置密码操作(也在来自的帐户控制器中) MVC4模板): [HttpPost] [AllowAnonymous] public ActionResult ResetPassword(string un,string rt) { var model = new ResetPasswordViewModel {UserName = un,ResetToken = rt}; return View(model); } 我也尝试删除HttpPost属性,但这也产生了401.我在这里缺少什么? UPDATE Matched Route: {controller}/{action}/{id} Generated URL: /SiteRoot/Reports/Account/ResetPassword?un=whatever&rt=removedForSecurity using the route "Reports/{controller}/{action}/{id}" 请注意,它正在查看“报告”区域.因此,我在ForgotPassword操作中更改了我的锚标记构造,在路由值对象中添加了Area规范,如下所示: var resetLink = "<a href='" + Url.Action("ResetPassword",rt = token,Area = ""},"http") + "'>Reset Password</a>"; 但它仍在尝试使用“报告”区域.如何确保电子邮件中的锚标记将指向站点根目录而不是区域? 更新2 更新3 @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 解决方法
我没有看到你设置这种方式的任何问题.这里还有其他事情要发生.检查您的_Layout.cshmtl文件,并确保您没有任何可能导致401的其他操作的调用.
这个人有类似的问题:https://stackoverflow.com/a/11046666/199913 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- .net – 为每个操作设置MaxAllowedContentLength / maxRequ
- 如何将ASP.NET用户控件转换为Web /复合控件?
- asp.net – 与WCF和其他Web服务有什么区别?
- ASP.NET MVC是一个大的企业项目的不好的选择吗?
- ASP.NET jQuery AutoComplete – 首次搜索后文本框无响应
- asp.net-mvc – 尝试解密FormsAuthentication票证总是无法验
- asp.net-mvc-3 – DropDownListFor Unobtrusive Validation
- asp.net – 测试后的NUnit回滚
- asp.net – 如何使用数据库实现同步Memcached
- 如何在IIS 7上的经典ASP中启用大型文件的上传?