微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

即使该URL包含ASP.NET MVC上的验证密钥信息,也不会加载“重置密码”视图

如何解决即使该URL包含ASP.NET MVC上的验证密钥信息,也不会加载“重置密码”视图

首先,我也在这里检查了其他解决方案,但这似乎并不能解决我的问题。 问题是,一切正常。如果用户单击“忘记密码”并输入其用户名。他会收到一封带有重置密码链接的电子邮件。现在,如果他单击该URL,则将其定向到该URL,但未加载resetpassword页面,而是正在加载另一个条件,即HttpNotFound()页面。迫切需要知道我的代码出了什么问题。

这是我的ForgotPassword操作

       [HttpPost]
        public ActionResult ForgotPassword(string username)
        {
            string message = "";
            using (MBNSystemEntities db = new MBNSystemEntities())
            {
                var userdetails = db.Users.Where(x => x.UserName == username).FirstOrDefault();
                if (userdetails != null)
                {
                    string validationKey = Guid.NewGuid().ToString().Substring(0,8);
                    string validationPin = Guid.NewGuid().ToString().Substring(0,4);
                    SendMail(userdetails.Email,validationKey,"ResetPassword");

                    UserValidationRequest uvr = new UserValidationRequest();
                    uvr.UserId = userdetails.UserId;
                    uvr.ValidationType = 1;
                    uvr.ValidationExpiryDate = DateTime.Now.AddDays(1);
                    uvr.ValidationKey = validationKey;
                    uvr.ValidationPin = validationPin;
                    uvr.ValidationStatus = 0;
                    db.UserValidationRequests.Add(uvr);
                    db.SaveChanges();
                    message = "Reset Password link has been sent to your email id.";
                }
                else
                {
                    message = "Account Not Found";
                }
            }
            ViewBag.Message = message;
            return View();  
        }

这是我的ResetPassword操作

                public ActionResult ResetPassword(string validationKey)
        {
            if(string.IsNullOrWhiteSpace(validationKey))
            {
                return HttpNotFound();
            }
          using (MBNSystemEntities db = new MBNSystemEntities())
            {
                var user = db.UserValidationRequests.Where(x => x.ValidationKey == validationKey).FirstOrDefault();
                if (user != null)
                {
                    ResetPasswordModel model = new ResetPasswordModel();
                    model.validationKey = validationKey;
                    return View(model);
                }
                else
                {
                    return HttpNotFound();
                }
            }
        }

我通过设置断点进行检查。验证密钥在Forgetpassword(字符串验证密钥)中传递为null,而不是在ForgotPassword操作中生成的实际验证密钥。 这是电子邮件示例:

enter image description here

解决方法

您发送的电子邮件在传递值方面是错误的

localhost:44338/Accounts/ResetPassword?vk={value}

它正在寻找一个名为vk的参数,但它应该是validationKey

如果您可以将SendEmail函数更改为添加validationKey而不是vk,它将解决您的问题

在您的ResetPassword(string validationKey)中,您可以将名称更改为

ResetPassword(string vk)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。