重置密码电子邮件中的网址未返回视图

时间:2015-07-15 19:39:56

标签: c# asp.net-mvc asp.net-identity

我使用电子邮件在mvc中重置我的密码,代码看起来很好我可以将令牌发送到电子邮件。但是当我点击电子邮件中的链接时它没有,重定向到重置密码页

这是我在emailreset操作中的代码

 public async Task<ActionResult> ForgotPassword(ForgotPasswordViewModel model)
    {
        //SendSmsBusiness objap = new SendSmsBusiness();
        RegisterBusiness reg = new RegisterBusiness();

        if (ModelState.IsValid)
        {

            ApplicationUser user = new ApplicationUser();
            user = reg.UserManager.FindByEmail(model.Email);

            // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
            // Send an email with this link
            if (user != null)
            {
                string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
                var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol:Request.Url.Scheme);
                await UserManager.SendEmailAsync(user.Id, "Reset Password", "Please reset your password by clicking <a href=\"" + callbackUrl + "\">here</a>");

                return RedirectToAction("ForgotPasswordConfirmation", "Account");
            }

            {
                ModelState.AddModelError("", "The user does not exist");
                return View();
            }
        }
        // If we got this far, something failed, redisplay form
        return View(model);
    }

我不知道我的request.url.scheme是否为null,因为我有一个resetpassword页面。这是它的观点。

 @model Template.Model.ResetPasswordViewModel
@{
ViewBag.Title = "Reset password";
 }

<h2>@ViewBag.Title.</h2>

@using (Html.BeginForm("ResetPassword", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
    @Html.AntiForgeryToken()
<hr />
@Html.ValidationSummary("", new { @class = "text-danger" })

<div class="panel panel-default">
    <div class="panel-heading " style="background-color: green;"></div>
    <div class="panel-body">
        <div class="form-group">
            @Html.LabelFor(m => m.Code, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.TextBoxFor(m => m.Code, new { @class = "form-control" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.TextBoxFor(m => m.Password, new { @class = "form-control" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(m => m.ConfirmPassword, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.TextBoxFor(m => m.ConfirmPassword, new { @class = "form-control" })
            </div>
        </div>
    </div>
</div>
<div class="form-group">
    <div class="col-md-offset-2 col-md-10">
        <input type="submit" value="Create" class="btn btn-default" />

    </div>
</div>
}
@section Scripts {
@System.Web.Optimization.Scripts.Render("~/bundles/jqueryval")
}

任何帮助表示感谢。

resetpassword controller

   // GET: /Account/ResetPassword
    [AllowAnonymous]
    public ActionResult ResetPassword(string code)
    {
        return code == null ? View("Error") : View();
    }

    //
    // POST: /Account/ResetPassword
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> ResetPassword(ResetPasswordViewModel model)
    {
        RegisterBusiness reg = new RegisterBusiness();
        if (ModelState.IsValid)
        {
            ApplicationUser user = new ApplicationUser();
            user = reg.UserManager.FindByEmail(model.Email);
            if (user == null)
            {
                ModelState.AddModelError("", "No user found.");
                return View();
            }
            IdentityResult result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password);
            if (result.Succeeded)
            {
                return RedirectToAction("ResetPasswordConfirmation", "Account");
            }
            else
            {
                AddErrors(result);
                return View();
            }
        }
        // If we got this far, something failed, redisplay form
        return View(model);
    }

0 个答案:

没有答案