2015-01-05 13 views
9

Ich benutze Identität 2.1 in meiner MVC5 App. Ich gründe die isPersistent Eigenschaft des PasswordSignInAsync auf true zu ermöglichen ‚Remember Me‘:ASP.NET Identity 2 Remember Me - Benutzer wird abgemeldet

var result = await SignInManager.PasswordSignInAsync(model.Username, 
    model.Password, 
    true, 
    shouldLockout: false); 

Aber wenn ich in über Nacht eingeloggt bleiben, dann, wenn ich die Seite am Morgen aufzufrischen, es meldet mir heraus und ich Ich muss mich erneut anmelden. Wie verhindere ich die automatische Abmeldung, bis sich der Benutzer manuell abmeldet?

Hat es etwas mit der Cookie-Authentifizierung zu tun, die Identität verwendet? Ich verstehe die CookieAuthenticationOptions, die in Startup.Auth.cs festgelegt werden, nicht wirklich.

new CookieAuthenticationProvider 
{ 
    OnValidateIdentity = SecurityStampValidator 
     .OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
     validateInterval: TimeSpan.FromMinutes(30), 
     regenerateIdentity: (manager, user) 
     => user.GenerateUserIdentityAsync(manager)) 
} 
+2

'validateInterval: TimeSpan.FromMinutes (30)' bedeutet, dass der Cookie nur für 30 Minuten gültig ist. SO ja, es wird bis zum Morgen abgelaufen sein. –

+0

Großartig, danke. Ich war mir nicht sicher, ob sie verwandt waren. –

+1

@RhysStephens, Hast du die Antwort bekommen, die du erwartet hast? Jeder hat gesagt, dass er expireTimeSpan ändern soll. Ich möchte, dass unsere Anwendung auf expireTimeSpan eingestellt werden sollte, aber im Falle, dass die ausgewählte mich erinnert, sollte Token nicht ablaufen, bevor der Benutzer sich manuell abmeldet. –

Antwort

11

Ich denke, Sie sollten this article lesen. Es gibt zwei verschiedene Intervalle: ValidateInterval und ExpireTimeSpan. Und in Ihrem Fall denke ich, Sie sollten die expireTimeSpan, nicht die ValidateInterval ändern.

+0

Ja, das ist ein sehr guter Artikel, um es zu erklären. –

+0

Er verwendet Cookie-basierte Authentifizierung. Wie können wir dies für die tokenbasierte Authentifizierung tun? –

2

Es gibt eine Erklärung für TimeSpan Parameter in similar question. Verwenden Sie einfach die unendlichen Cookies, wie folgt aus:

OnValidateIdentity = SecurityStampValidator 
    .OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
    validateInterval: TimeSpan.FromMinutes(0), 
    regenerateIdentity: (manager, user) 
    => user.GenerateUserIdentityAsync(manager)) 

Dies gilt auch für sie richtig gebraucht wird funktionieren:

Anruf

await UserManager.UpdateSecurityStampAsync(userId); 

vor

AuthenticationManager.SignOut(); 
+0

Das funktioniert nicht für mich. Es meldet mich immer noch, wenn ich es über Nacht verlasse. 'OnValidateIdentity = SecurityStampValidator .OnValidateIdentity ( validateInterval: TimeSpan.FromDays (30), regenerateIdentity: (Manager, Benutzer) => user.GenerateUserIdentityAsync (Manager))' Welche Cookie es soll sein? –

+0

@RhysStephens In Ihrem Code verwenden Sie das 30-Tage-Timeout. Aber das funktioniert vielleicht nicht, da es einige innere Einschränkungen übertrifft.Versuchen Sie genau zu verwenden, basierend auf "TimeSpan" – VMAtm

+0

Ich werde es ausprobieren. Es ist ein bisschen klobig, um es so zu machen. –

0

Ich sollte mehr schreiben. Dieser seltsame Code:

OnValidateIdentity = SecurityStampValidator 
    .OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
    validateInterval: TimeSpan.FromMinutes(0), 
    regenerateIdentity: (manager, user) 
    => user.GenerateUserIdentityAsync(manager)) 

verursachte meine App Cookie nach 1 Tag verloren. Ich weiß wirklich nicht warum, aber nach dem Ausschließen dieses Codes und dem Hinzufügen eines Mash-Keys zu meiner web.config "Remember Me", funktioniert die Zukunft endlich richtig.

My aktuellen Code ist:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
    LoginPath = new PathString("/Account/Login"), 
    ExpireTimeSpan = TimeSpan.FromDays(5) 
}); 
0

Formular this post die isPersistent Parametersätze, ob die Authentifizierungssitzung über mehrere Anforderungen beibehalten wird.

Verwandte Themen