2014-12-08 14 views
6

Pracuję nad systemem uwierzytelniania, który korzysta z tożsamości ASP.NET z Entity Framework, i chcę mieć kilka twierdzeń, które są wartościami obliczonymi, zamiast być zakodowane na stałe w tabeli roszczeń .Dynamiczne roszczenia użytkowników w ASP.NET Identity EF

Kiedy użytkownik się loguje, w jaki sposób mogę dodać oświadczenia dynamiczne do sesji logowania bez faktycznego dodawania ich do tabeli roszczeń?

Na przykład mogę chcieć przechowywać DOB każdego użytkownika, ale chcę dodać IsBirthday jako roszczenie, jeśli data logowania pasuje do DOB ​​użytkownika. Nie chcę przechowywać roszczenia "IsBirthday" dla każdego użytkownika, ponieważ zmienia się codziennie dla wszystkich.

W moim kodu używam tego, aby się zalogować:

var signInResult = await SignInManager.PasswordSignInAsync(username, password, false, false); 

Po tym nazywa mogę odwołać ClaimsPrincipal, ale własność roszczeń jest IEnumerable, a nie listy, więc nie mogę dodać do tego.

EDYTOWANIE: Należy również wspomnieć o używam bibliotek Microsoft.AspNet.Identity.Owin.

+0

Odpowiedź Per Chris Pratt, w ramach tej konfiguracji będzie przechowywanie DOB jako właściwość na modelu. – zaparker

Odpowiedz

11

OK, wszyscy, trochę pogrzebałem w klasach dostarczonych w ASP.NET Identity i znalazłem to, którego potrzebowałem, aby zastąpić. Klasa SignInManager ma metodę CreateUserIdentityAsync, która wykonuje dokładnie to, co chciałem. Poniższy kod dodał roszczenie IsBirthday do mojej tożsamości, ale nie zapisał go w bazie danych.

public class ApplicationSignInManager : SignInManager<ApplicationUser, string> 
{ 
    public override async Task<System.Security.Claims.ClaimsIdentity> CreateUserIdentityAsync(ApplicationUser user) 
    { 
     var identity = await base.CreateUserIdentityAsync(user); 
     identity.AddClaim(new System.Security.Claims.Claim("IsBirthday", user.DOB.GetShortDateString() == DateTime.Now.GetShortDateString())); 
     return identity; 
    } 

    // ... EXCLUDING OTHER STUFF LIKE CONSTRUCTOR AND OWIN FACTORY METHODS ... 
} 
Powiązane problemy