Представление сброса пароля не загружается, даже если URL-адрес содержит информацию о ключе проверки на ASP.NET MVC

#c# #asp.net #asp.net-mvc #model-view-controller

#c# #asp.net #asp.net-mvc #model-view-controller

Вопрос:

Прежде всего, я также проверил другие решения здесь, но, похоже, это не решает мою проблему. Проблема в том, что все работает нормально. Если пользователь нажимает «Забыть пароль» и вводит свое имя пользователя. Ему отправляется электронное письмо со ссылкой для сброса пароля. Теперь, если пользователь нажимает на 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();
                }
            }
        }

  

Я проверил, поставив точку останова. Ключ проверки передается null в Forgetpassword(строка validationkey) вместо фактического ключа проверки, сгенерированного в действии ForgotPassword.
Это образец электронной почты:введите описание изображения здесь

Комментарии:

1. uvr.ValidationKey = validationKey; это null вы говорите?

2. Нет, сэр, uvr.validationKey = validationKey в порядке. Там передается значение. validationKey в методе ForgotPassword передается значение null

3. или это ResetPassword так?

4. Я говорю о «public ActionResult ResetPassword (string validationKey)» этот

5. можете ли вы добавить образец письма?

Ответ №1:

отправленное вами электронное письмо неверно с точки зрения передаваемых значений

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

он ищет параметр с именем vk , но он должен быть validationKey

если вы можете изменить свою SendEmail функцию на add validationKey вместо vk нее, это решит вашу проблему

или

в вашем ResetPassword(string validationKey) вы можете изменить имя на

ResetPassword(string vk)