PasswordReset 在 WebMatrix 中不起作用
Posted
技术标签:
【中文标题】PasswordReset 在 WebMatrix 中不起作用【英文标题】:PasswordReset is not working in WebMatrix 【发布时间】:2016-08-16 07:52:18 【问题描述】:我正在使用 WebMatrix 中现有的 PasswordReset 表单。我没有更改模块中的任何内容,但是它不起作用。当我点击“您忘记密码了吗?”链接,它会将我带到 ForgotPassword 表单。在我输入我的电子邮件地址并单击“发送说明”后,它会转到我的电子邮件。但是,当我点击它提供的链接时,我会立即进入密码重置屏幕,但是,屏幕顶部显示“无法重置密码。请更正错误并重试。”尽管如此,我还是尝试重置我的密码,但没有任何反应。
以下是密码重置代码:
@* Remove this section if you are using bundling *@
@section Scripts
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
@
Layout = "~/_SiteLayout.cshtml";
Page.Title = "Password Reset";
var passwordResetToken = Request.Form["resetToken"] ?? Request.QueryString["resetToken"];
bool tokenExpired = false;
bool isSuccess = false;
// Setup validation
Validation.RequireField("newPassword", "The new password field is required.");
Validation.Add("confirmPassword",
Validator.EqualsTo("newPassword", "The new password and confirmation password do not match."));
Validation.RequireField("passwordResetToken", "The password reset token field is required.");
Validation.Add("newPassword",
Validator.StringLength(
maxLength: Int32.MaxValue,
minLength: 6,
errorMessage: "New password must be at least 6 characters"));
if (IsPost && Validation.IsValid())
AntiForgery.Validate();
var newPassword = Request["newPassword"];
var confirmPassword = Request["confirmPassword"];
if (WebSecurity.ResetPassword(passwordResetToken, newPassword))
isSuccess = true;
else
ModelState.AddError("passwordResetToken", "The password reset token is invalid.");
tokenExpired = true;
<hgroup class="title">
<h1>@Page.Title.</h1>
<h2>Use the form below to reset your password.</h2>
</hgroup>
@if (!WebMail.SmtpServer.IsEmpty())
if (!Validation.IsValid())
<p class="validation-summary-errors">
@if (tokenExpired)
<text>The password reset token is incorrect or may be expired. Visit the <a href="~/Account/ForgotPassword">forgot password page</a>
to generate a new one.</text>
else
<text>Could not reset password. Please correct the errors and try again.</text>
</p>
if (isSuccess)
<p class="message-success">
Password changed! Click <a href="~/Account/Login" title="Log in">here</a> to log in.
</p>
<form method="post">
@AntiForgery.GetHtml()
<fieldset>
<legend>Password Change Form</legend>
<ol>
<li class="new-password">
<label for="newPassword" @if (!ModelState.IsValidField("newPassword")) <text>class="error-label"</text>>New password</label>
<input type="password" id="newPassword" name="newPassword" disabled="@isSuccess" @Validation.For("newPassword") />
@Html.ValidationMessage("newPassword")
</li>
<li class="confirm-password">
<label for="confirmPassword" @if (!ModelState.IsValidField("confirmPassword")) <text>class="error-label"</text>>Confirm password</label>
<input type="password" id="confirmPassword" name="confirmPassword" disabled="@isSuccess" @Validation.For("confirmPassword") />
@Html.ValidationMessage("confirmPassword")
</li>
<li class="reset-token">
<label for="resetToken" @if (!ModelState.IsValidField("resetToken")) <text>class="error-label"</text>>Password reset token</label>
<input type="text" id="resetToken" name="resetToken" value="@passwordResetToken" disabled="@isSuccess" @Validation.For("resetToken") />
@Html.ValidationMessage("resetToken")
</li>
</ol>
<input type="submit" value="Reset password" disabled="@isSuccess"/>
</fieldset>
</form>
else
<p class="message-info">
Password recovery is disabled for this website because the SMTP server is
not configured correctly. Please contact the owner of this site to reset
your password.
</p>
这是我的 _AppStart 中的代码:
WebSecurity.InitializeDatabaseConnection("StarterSite", "UserProfile", "UserId", "Email", autoCreateTables: true);
OAuthWebSecurity.RegisterGoogleClient();
WebMail.SmtpServer = "smtp.gmail.com";
WebMail.EnableSsl = true;
WebMail.SmtpPort = 587;
WebMail.UserName = "mark.anthnony@yahoo.com";
WebMail.Password = "September";
WebMail.From = "mark.anthony@yahoo.com";
【问题讨论】:
【参考方案1】:更改用户对象中的常量。从那里删除所需的属性。还。我建议编写自己的基本身份验证。
【讨论】:
这是什么意思?我没有关注你。 您好,抱歉,我没有太多时间。 WebMatrix 是一个轻量级的身份验证框架,在使用时具有一定的稳定性。其中之一是查看 chtml 属性。在那里你可以看到验证规则删除它们,你的错误就会消失。而且我已经与 WebMatrix 合作了很长时间,并且还有许多其他类似的一致性,我已经编写了自己的框架,我建议你这样做。最好的问候以上是关于PasswordReset 在 WebMatrix 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Web Developer/WebMatrix:编辑时 SQL CE 数据库表错误
如何在 WebMatrix 中使用 LAST_INSERT_ID()
尝试通过安全透明方法“WebMatrix.WebData.PreApplicationStartCode.Start()”