Проверка подлинности пользовательских форм ASP не работает, потому что файл cookie потерян

У меня есть веб-сайт ASP .Net 4.5 MVC, где я настроил аутентификацию форм, следуя этому руководству. Разница в том, что я аутентифицируюсь через бэкэнд-dll, поэтому я пропустил все компоненты базы данных в учебнике, и там, где учебник выбирает пользователя из базы данных, я получаю его из обычного вызова метода. Я уже следовал этому руководству и успешно внедрил его на новом веб-сайте MVC. На этот раз я реализовал его на существующем веб-сайте MVC и не могу заставить его работать.

Когда файл cookie добавлен в Response.Cookies он существует только до тех пор, пока код не вернет View пользователю. После этого он больше не существует в Response.Cookies а это значит что в Global.asax Application_PostAuthenticateRequest метод, var authCookie = Request.Cookies[FormsAuthentication.FormsCookieName]; всегда возвращается null, Я пытался добавить другие простые куки, и они сохраняются, как и ожидалось.

Вот так я добавляю куки аутентификации форм

CustomUser user = service.GetUser(username, password);

            if (user != null)
            {
                var serializeModel = new CustomPrincipalSerializeModel
                {
                    UserName = user.UserName,
                    UserId = user.Id
                };

                var userData = JsonConvert.SerializeObject(serializeModel);
                var authTicket = new FormsAuthenticationTicket(1, user.Id, DateTime.Now, DateTime.Now.AddMinutes(30), false, userData);
                var encryptedTicket = FormsAuthentication.Encrypt(authTicket);

                var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket) { Expires = DateTime.Now.AddMinutes(30) };
                Response.AppendCookie(cookie);
            }

И если я изменю эту строку

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket) { Expires = DateTime.Now.AddMinutes(30) };

к

var cookie = new HttpCookie("test", "testing") { Expires = DateTime.Now.AddMinutes(30) };

Тогда "тестовый" cookie будет работать как положено, и я могу получить его в Global.asax Application_PostAuthenticateRequest

0 ответов

Другие вопросы по тегам