2016-08-03 40 views
-2

Ich implementiere owin Middleware, wo ich die Sitzung in der Datenbank speichern muss. Betrachten Sie diese Beispiel-So erstellen Sie einen benutzerdefinierten Sitzungsspeicher

var options = new CookieAuthenticationOptions() 
      { 
       AuthenticationType = CookieAuthenticationDefaults.AuthenticationType, 
       CookieName = "ChatCookies", 
       LoginPath = CookieAuthenticationDefaults.LoginPath, 
       LogoutPath = CookieAuthenticationDefaults.LogoutPath, 
       ExpireTimeSpan = TimeSpan.FromDays(1), 
       SessionStore = 
      }; 

Hier gibt Session-Speicher-Option ist, und ich will es implementieren, so bin ich nicht in der Lage, um einen Reim, wie es zu tun. Bitte hilf mir, es zu machen.

Antwort

0

Sie benötigen eine Instanz einer Klasse, die IAuthenticationSessionStore implementiert. Die Schnittstelle selbst ist recht einfach:

public interface IAuthenticationSessionStore 
{ 
    Task RemoveAsync(string key); 
    Task RenewAsync(string key, AuthenticationTicket ticket); 
    Task<AuthenticationTicket> RetrieveAsync(string key); 
    Task<string> StoreAsync(AuthenticationTicket ticket); 
} 

Here's ein Beispiel für die Umsetzung dieser Schnittstelle. Dann einfach die Instanz in geben:

public class CustomAuthenticationSessionStore : IAuthenticationSessionStore { 
    // Your implementation depending on use case goes here. 

    public Task RemoveAsync(string key) { 
     throw new NotImplementedException(); 
    } 

    public Task RenewAsync(string key, AuthenticationTicket ticket) { 
     throw new NotImplementedException(); 
    } 

    public Task<AuthenticationTicket> RetrieveAsync(string key) { 
     throw new NotImplementedException(); 
    } 

    public Task<string> StoreAsync(AuthenticationTicket ticket) { 
     throw new NotImplementedException(); 
    } 
} 

var options = new CookieAuthenticationOptions() { 
    AuthenticationType = CookieAuthenticationDefaults.AuthenticationType, 
    CookieName = "ChatCookies", 
    LoginPath = CookieAuthenticationDefaults.LoginPath, 
    LogoutPath = CookieAuthenticationDefaults.LogoutPath, 
    ExpireTimeSpan = TimeSpan.FromDays(1), 
    SessionStore = new CustomAuthenticationSessionStore() 
}; 
+0

Ich war auf der Suche auf die GitHub-URL, aber nicht in der Lage, herauszufinden, wie die cookieauthenticationstore einzurichten, da der Konstruktor wird ticketdataformat Objekt zu akzeptieren. –

+0

Ich habe die gleiche Frage. Die Dokumentation sagt: "- Ein optionaler Container, in dem die Identität über Anfragen hinweg gespeichert wird." - Across-Anfrage, aber immer über Anfragen ist es unmöglich Shop-Identität, denn wenn der Benutzer authentifiziert wurde, ruft nur 'RetrieveAsync'. Wie kann Identität über Anfrage hinweg gespeichert werden, wenn immer 'RetrieveAsync' aufgerufen wird? Ich brauche 'RenewAsync' oder' StoreAsync' Aufrufe für jede Anfrage, ist es nicht so? – gvivetapl