由于某些未知原因,我无法再在Chrome上登录自己的应用程序。
这就是我登录的方式:
[AllowAnonymous]
[HttpPost]
public async Task<ActionResult> Login(LoginModel model)
{
if (User.Identity.IsAuthenticated)
return RedirectToAction("Index", "Home");
if (!ModelState.IsValid)
return View();
var status = await signInManager.PasswordSignInAsync(model.Login, model.Password, true, false);
switch (status)
{
case Microsoft.AspNet.Identity.Owin.SignInStatus.Success:
{
int userId = User.Identity.GetUserId<int>();
if (userManager.IsFirstLogin(userId))
{
return RedirectToAction("Declaration", "Home", new { returnUrl = model.ReturnUrl });
}
return RedirectToLocal(model.ReturnUrl);
}
default:
return View();
}
}
我调试了代码并且PasswordSignInAsync成功,但Chrome没有显示为该页面设置的Cookie。实际上,重定向到操作,标记为[授权]属性再次重定向到登录页面。
我在IE上测试了网站,一切正常,我可以登录和注销,并正确设置了cookie。
如果我能提供更详细的信息,请告诉我。
修改:更多详情
我一直在测试一个应用程序,它是对日期时间敏感的(在特定日期之后停止显示)。我将系统时间更改为2016年8月1日,登录后再切换回现在。那时候一切都停止了。
奇怪的是,当我切换回未来的时间时,我可以再次登录并正确设置会话cookie。但是当我回到“现在”时,我无法再次登录。
答案 0 :(得分:0)
仍然需要调查发生了什么,但是对我来说,“解决办法”是更改Auth cookie的名称。
在Startup.Auth.cs中:
List<Action> sequentialMethods = new List<Action>()
{
SomeMethod1,
SomeMethod2,
() => ExecuteParallelAsync().Wait(),
SomeMethod3,
SomeMethod4
};
我怀疑这样一个事实,我的计算机上有很多可用于开发的网站,并且所有网站都具有相同的默认Cookie名称。
答案 1 :(得分:0)
我的应用程序中有同样的问题,但在我的情况下,我的应用程序是在 iframe 中打开的,并且当登录时 cookie 未设置到浏览器中,因为发生了错误,并且超过 80 的 chrome 版本更改了那里的 cookie 策略。我们需要在 web.config 文件中设置这个代码
<httpCookies sameSite="None" requireSSL="true" />