2016-08-24 75 views
2

我有一个登录页面,记住我选项。我想配置记住我的cookie到期时间会比较长,比如说一个月。如何在ASP .Net标识核心中为持久性和非持久性Cookie配置不同的ExpireTimeSpan

我可以使用CookieAuthenticationOptions.ExpireTimeSpan属性,但这对于RememberMe选项“仅”不起作用。

我希望在当前浏览会话(如果用户未选择“记住”选项)中登录几分钟(如登录后30分钟)。在这种情况下,我会使用ExpireTimeSpan = TimeSpan.FromMinutes(30)

有没有一种方法可以配置类似“RememberMeDuration”的配置两种不同的设置,当选择了RememberMe并且未选择时? - 开箱即用(至少不会为这种小功能创建全新的中间件)

回答

4

绝对过期可用于实现记住我(例如30天)功能。 使用身份时,请在密码检查后在SignInAsync期间设置ExpiresUtc。

var au = new ApplicationUser() { Email = model.Email }; 
var r1 = await _userManager.CheckPasswordAsync(au, model.Password); 
if (r1) 
{ 
    await _signInManager.SignInAsync(au, new AuthenticationProperties() { ExpiresUtc = DateTime.UtcNow.AddDays(30) }); 
} 

如果使用不具有身份的Cookie中间件,则在定制密码检查成功后设置ExpiresUtc。

从文档:

await HttpContext.Authentication.SignInAsync(
    "MyCookieMiddlewareInstance", 
    principal, 
    new AuthenticationProperties 
    { 
     ExpiresUtc = DateTime.UtcNow.AddDays(30) 
    }); 

IsPersistent和ExpiresUtc是互斥的

+0

嗨bvoleti。感谢您使用CheckPasswordAsync和SignInAsync的解决方法。但是,如果我使用ExpiresUtc,我将失去IsPersistent,并因此导致滑动失效失效。 这将是我的最后一个选择,因为我想尝试一些可以让滑动过期保持活跃状态​​的东西。 –