ссылка забыл пароль переносит меня на домашнюю страницу в .net C # - PullRequest
0 голосов
/ 06 мая 2018

Я включен Забыли пароль в моем проекте MVC, и ссылка была отправлена ​​на электронную почту, но когда я нажимаю на ссылку, я перехожу на домашнюю страницу, а не на страницу сброса пароля

примечание: URL-адрес loclalhost: 1157 / Account / Resetpassword? Userid = "идентификатор пользователя был в ссылке" & code = "какой-то код был в ссылке"

но представление является домашней страницей

1 Ответ

0 голосов
/ 06 мая 2018

Трудно оценить вашу маршрутизацию, не видя, как выглядит ваш проект и настроен ли ActionResult для представления Resetpassword. Я полагаю, вы используете бритву, а не aspx?

Что я могу сделать, это дать вам следующий пример того, как я осуществляю определенный доступ к сайту по ссылке в электронной почте.

Мы генерируем html и отправляем электронное письмо через smtp или любой другой метод, который вы используете. Ссылка для нажатия - это простой тег привязки с href, содержащим URL и строку запроса. пример:

текст сообщения: нажмите здесь, чтобы получить доступ к паролю. Якорь HTML: <a href="https://www.testSite.com/PasswordReset/AuthEmailClick?AutKn=07531a9d-84cb-4282-9387-1373fe9837be"

То, что происходит выше, заключается в том, что мы генерируем токен, в котором хранится информация о пользователях, а не фактическая информация о пользователе. Если вы наблюдаете приведенный выше URL, «PasswordReset» - это имя контроллера, «AuthEmailClick» - это ActionResult, который определит, к какому представлению направлен пользователь.

В вашем проекте вам нужно иметь контроллер «PasswordReset», как в приведенном выше примере, внутри этого контроллера вам нужен ActionResult с именем «AuthEmailClick», как в приведенном выше примере. Код:

public ActionResult AuthAprEm(string AutKn)
    {
        //The token in the email is stored in database
        var authDetails = 
            GenMethods.ExecuteStoredProc("RedeemAuthToken", 
            new List<string> { "Token" }, 
            new List<object> { AutKn }, 
            "SQL CONNECTION STRING");

        //If the token is invalid, return to relevant view for user to see
        if (authDetails.Rows.Count == 0)
        {
            return RedirectToAction("TokenUsed", "Home", new { });
        }
        else
        {
            //GET DESIRED INFORMATION FROM DATABASE QUERY, THEN REDIRECT TO DESIRED VIEW
            var username = authDetails.Rows[0]["UserName"].ToString();
            var userPwd = authDetails.Rows[0]["UserPassword"].ToString();
            if (username.ToLower().Contains("tmp_") && userPwd.ToLower().Contains("tmp_"))
            {
                return RedirectToAction("TempCredWarn", "Home", new { });
            }
            var authRsp1 = WebAuth.UserAuth(username, userPwd, ConfigurationManager.ConnectionStrings["DbPlaceHolder"].ConnectionString.Replace("{PlcHold}", ConfigurationManager.AppSettings["HostDb"]));
            authRsp1.Staib = true;
            return RedirectToAction("CreateNewSession", authRsp1);
        }
    }

Таким образом, в приведенном выше примере есть ActionResult, который будет вызываться, когда пользователь щелкает ссылку в электронном письме. В этом actionResult вы можете следовать любой логике, которую предпочитаете. Важным аспектом является RedirectToAction, в который вы в конечном итоге включите имя действия «resetPassword», которое будет выполнено и вернет правильное представление.

Надеюсь, это поможет.

...