PasswordReset не работает в WebMatrix

Я использую существующую форму PasswordReset в WebMatrix. Я ничего не менял в модуле, но он не работает. Когда я нажимаю «Вы забыли свой пароль?» ссылка, и она ведет меня к форме 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 = "[email protected]";
WebMail.Password = "September";
WebMail.From = "[email protected]";

person tnlewis    schedule 22.04.2016    source источник


Ответы (1)


Измените константы в вашем объекте User. Удалите оттуда необходимые атрибуты. Также. Я предлагаю написать свою собственную базовую аутентификацию.

person Hamit YILDIRIM    schedule 22.04.2016
comment
Что это обозначает? Я не слежу за тобой. - person tnlewis; 26.04.2016
comment
Здравствуйте, извините, у меня мало времени. WebMatrix — это легкая структура аутентификации, и при ее использовании есть некоторое постоянство. Один из них находится в атрибуте view chtml. Там вы можете увидеть, что правила проверки удаляют их, и ваша ошибка исчезнет. А также я работал с WebMatrix в течение длительного времени, и есть много других подобных консистенций, и я написал свой собственный фреймворк, и я предлагаю вам это. наилучшие пожелания - person Hamit YILDIRIM; 09.05.2016