2016-08-24 72 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,並因此導致滑動失效失效。 這將是我的最後一個選擇,因爲我想嘗試一些可以讓滑動過期保持活躍狀態​​的東西。 –