2016-05-07 2 views
14

Я использую идентификатор Asp.Net для авторизации моего приложения. Теперь мне нужно сделать это: если пользователь не работает через 30 минут, перейдите на страницу входа, когда он не выбирает флажок «isPersistent». И, если он выбрал флажок «isPersistent», установите дату истечения срока действия файла cookie в течение 14 дней. я пытаюсь сделать это путем изменения в Starup.Auth.cs, как это:Как установить asp.net Идентификатор cookie истекает время

public void ConfigureAuth(IAppBuilder app) 
{ 
    app.UseCookieAuthentication(new CookieAuthenticationOptions 
    { 
     AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
     LoginPath = new PathString("/Account/Login"), 
     SlidingExpiration = true, 
     CookieName = WebHelpers.ConstStrings.AUTHCOOKIESNAME 
    }); 
} 

и код для входа в аккаунт, как это:

private async Task SignInAsync(User user, bool isPersistent) 
{ 
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie); 
    var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie); 
    if (isPersistent) 
    { 
     AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity); 
    } 
    else 
    { 
     AuthenticationManager.SignIn(new AuthenticationProperties() { ExpiresUtc = new DateTimeOffset(DateTime.UtcNow.AddMinutes(30)) }, identity); 
    } 
} 

Но я обнаружил, что, когда пользователь не выбирает isPersistent флажок , дата истечения срока действия cookie уже «Session», а не текущее время плюс 30 минут. enter image description here

печенье статус при использовании кода, как после, так что 'запомнить меня' флажок не может работать. :(.

 app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      LoginPath = new PathString("/Account/Login"), 
      ExpireTimeSpan = TimeSpan.FromMinutes(30), 
      SlidingExpiration = true, 
      CookieName = WebHelpers.ConstStrings.AUTHCOOKIESNAME 
     }); 

enter image description here

ответ

21

Если IsPersistent свойство AuthenticationProperties установлено в ложное, то время истечения срока действия файла cookie s et to Session.

Если флажок «запомнить меня» является проверено тогда AuthenticationManager.SignIn(new AuthenticationProperties{ IsPersistent = true }, userIdentity); создаст печенье со временем истечения срока, равного ExpireTimeSpan вы установили в Startup.cs (по умолчанию 14days).

Если флажок «запомнить меня» в НЕ проверяется, то вы должны использовать AuthenticationManager.SignIn(new AuthenticationProperties{ IsPersistent = true, ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(30)}, userIdentity);. Снова IsPersistent имеет значение true, но теперь мы даем значение ExpiresUtc, поэтому оно не используется от CookieAuthenticationOptions от Startup.cs.

public override async Task SignInAsync(ApplicationUser user, bool isPersistent, bool rememberBrowser) 
{ 
    var userIdentity = await CreateUserIdentityAsync(user).WithCurrentCulture(); 
    // Clear any partial cookies from external or two factor partial sign ins 
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie, DefaultAuthenticationTypes.TwoFactorCookie); 
    if (rememberBrowser) 
    { 
     var rememberBrowserIdentity = AuthenticationManager.CreateTwoFactorRememberBrowserIdentity(ConvertIdToString(user.Id)); 
     AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, userIdentity, rememberBrowserIdentity); 
    } 
    else 
    { 
     //AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, userIdentity); 
     if (isPersistent) 
     { 
      AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = true }, userIdentity); 
     } 
     else 
     { 
      AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = true, ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(30) }, userIdentity); 
     }   
    } 
} 
+0

Отлично, я использую ваш код и выполняю вышеуказанную функцию, спасибо. Кроме того, я поставил Owin из версии 2.1.0 для обновления до 3.0.1. –

+0

Спасибо, все прояснилось мне – Janiiik

+0

Спасибо, ваш код и объяснение отлично работают. –

4

Используйте этот ...

public void ConfigureAuth(IAppBuilder app) 
{ 
    app.UseCookieAuthentication(new CookieAuthenticationOptions 
    { 
     ExpireTimeSpan = TimeSpan.FromHours(1), 
    });    
} 
+0

Спасибо, но я обнаружил, что «Запомнить меня» не может работать , если я устанавливаю это свойство. –

+0

Это не работает для меня. Он по-прежнему не работает до 14 дней. – Garth

+1

@Garth попытаться вручную удалить cookies вашего браузера. –

0

Я была такая же проблема, и этот код работал для меня (внутри файла Startup.cs) ..

services.Configure<IdentityOptions>(options => 
{ 
    options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(9999); 
}); 

Это добавляет примерно 27 лет не (или не истечет) стойкому печенье.

NB: Если вы хотите меньше времени окончания срока вы можете использовать TimeSpan.FromMinutes(1); в течение 1 минуты или TimeSpan.FromSeconds(30); в течение 30 секунд и т.д ..

Смежные вопросы