#c# #ios #asp.net-mvc #model-view-controller #asp.net-mvc-5
#c# #iOS #asp.net-mvc #модель-представление-контроллер #asp.net-mvc-5
Вопрос:
У меня есть приложение MVC5, которое развернуто в Azure. Теперь, чтобы протестировать его локально, я запускаю свое приложение с помощью Visual Studio (2019), затем запускаю сайт в браузере своих мобильных устройств.
Проблема в том, что когда я делаю это со своего iPad и вхожу в систему, после того, как я ввожу имя пользователя / пароль и нажимаю войти, я немедленно возвращаюсь к экрану входа.
Я пробовал разные браузеры на iPad. Я попытался очистить кеш на них. Я перезапустил свой компьютер и свой iPad. Все та же проблема. Я не вижу никаких ошибок. Но это работает, если я использую свой iPhone для входа в систему или из настольного браузера. Если он развернут в Azure, я могу войти в систему отовсюду, включая iPad.
Я выполняю отладку в коде и даже вижу, что вход в систему выполнен успешно, а возвращаемый URL-адрес является правильным URL:
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, true);
switch (result)
{
case SignInStatus.Success:
await UserManager.SetLockoutEndDateAsync(user?.Id, new DateTimeOffset(DateTime.UtcNow));
await UserManager.ResetAccessFailedCountAsync(user?.Id);
return RedirectToLocal(returnUrl);
Я даже пытался форсировать ситуацию, поместив следующий код в начало моего метода входа в систему:
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
System.Web.HttpContext.Current.Session.Clear();
System.Web.HttpContext.Current.Session.Abandon();
Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Может кто-нибудь помочь, пожалуйста? Спасибо.
Ответ №1:
Надеюсь, когда-нибудь это сэкономит чьи-то часы работы. Проблема была связана с наличием CookieSameSite в Startup.Auth.cs:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
ExpireTimeSpan = TimeSpan.FromDays(14),
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
SlidingExpiration = true,
CookieSameSite = SameSiteMode.Strict,
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(TimeSpan.FromMinutes(30), (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
Как только я удалил CookieSameSite = SameSiteMode.Strict,
, он начал работать.