Używam projektu ASP.NET MVC 5 o tożsamości 2.1.0 i VS2013 U4. Chcę dodać roszczenia do użytkownika podczas rejestracji w celu przechowywania w db. Roszczenia te reprezentują niestandardowe właściwości użytkownika.
Po utworzeniu strony internetowej administratora do tworzenia/edycji/usuwania użytkowników nadal używam metody tworzenia z poziomu AccountController
, aby utworzyć użytkownika, ale nie chcę się z nim logować. Jak mogę dodać te roszczenia do użytkownika?Jak dodawać oświadczenia podczas rejestracji użytkownika
Odpowiedz
Prawdopodobnie już mają Klasa UserManager
. Możesz użyć tego do tworzenia użytkowników i dodawania roszczeń.
Jako przykład w kontrolerze:
// gather some context stuff
var context = this.Request.GetContext();
// gather the user manager
var usermanager = context.Get<ApplicationUserManager>();
// add a country claim (given you have the userId)
usermanager.AddClaim("userid", new Claim(ClaimTypes.Country, "Germany"));
Aby to zadziałało trzeba zaimplementować własną UserManager
i połączyć go z kontekstu OWIN (w przykładzie jest to ApplicationUserManager
który w zasadzie jest class ApplicationUserManager : UserManager<ApplicationUser> { }
z tylko dodano niewielką ilość konfiguracji). Odczyt jest dostępny tutaj: https://msdn.microsoft.com/en-us/library/dn613290%28v=vs.108%29.aspx
można użyć jak
private void SignInAsync(User User)
{
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, User.Employee.Name));
claims.Add(new Claim(ClaimTypes.Email, User.Employee.EmailId));
claims.Add(new Claim(ClaimTypes.Role, User.RoleId.ToString()));
var id = new ClaimsIdentity(claims,
DefaultAuthenticationTypes.ApplicationCookie);
var claimsPrincipal = new ClaimsPrincipal(id);
// Set current principal
Thread.CurrentPrincipal = claimsPrincipal;
var ctx = Request.GetOwinContext();
var authenticationManager = ctx.Authentication;
authenticationManager.SignIn(id);
}
Po zalogowaniu przekazać wartość tabeli użytkownika w tej funkcji
SignInAsync(result);
można uzyskać wartość małż jak
var identity = (ClaimsPrincipal)Thread.CurrentPrincipal;
// Get the claims values
string UserRoleValue = identity.Claims.Where(c => c.Type == ClaimTypes.Role)
.Select(c => c.Value).SingleOrDefault();
Dodaje to roszczenia do pliku cookie uwierzytelniania użytkowników i ** nie ** zapisuje ich w bazie danych do załadowania przy następnym logowaniu. Praca z wątkami typu "Thread.CurrentPrincipal" nie jest dobrym pomysłem, ponieważ wątki mogą się zmieniać, szczególnie w scenariuszu asynchronicznym. – ChrFin
@MANISH O.K. Dzięki. Ale jak mogę uzyskać tego użytkownika w mojej metodzie/konta/logowania? – MilanM
@ChrFin jak mogę dodać te do db? – MilanM
Możesz w rzeczywistości tworzyć roszczenia w tym samym czasie, gdy tworzysz konto użytkownika.
Po prostu dodaj oświadczenia do obiektu użytkownika, zanim zadzwonisz do CreateAsync na menedżerze użytkownika.
var identityUser = new IdentityUser
{
UserName = username,
Email = email,
// etc...
Claims = { new IdentityUserClaim { ClaimType = "SomeClaimType", ClaimValue = "SomeClaimValue"} }
};
var identityResult = await _userManager.CreateAsync(identityUser, password);
Spowoduje to utworzenie użytkownika i powiązanie roszczeń z użytkownikiem jako jednej operacji logicznej z utrwaleniem.
- 1. Normalizowanie/sprawdzanie poprawności wpisu użytkownika "Miasto" podczas rejestracji
- 2. Jak zrobić wiele typów użytkowników podczas rejestracji?
- 3. Warunkowo zabezpieczające trasy (przepływ rejestracji użytkownika)
- 4. Uwierzytelnianie paszportu natychmiast po rejestracji nowego użytkownika
- 5. Django automatyczne logowanie po rejestracji użytkownika (1.4)
- 6. ignoruj debugger; oświadczenia node.js, podczas debugowania sesji
- 7. Jak wyjść z użycia oświadczenia
- 8. Jak dokonać rejestracji użytkownika i uwierzytelniania w PHP z ArangoDB?
- 9. Jak śledzić tworzenie rejestracji użytkownika jako konwersji w Google Analytics
- 10. Jak utworzyć profil po rejestracji użytkownika w Rails3 i Devise
- 11. Aplikacja do rejestracji django i niestandardowy model użytkownika Django 1.5
- 12. Wyjątek podczas rejestracji UnityPerRequestHttpModule z MVC 5
- 13. Jak zapobiec powtarzaniu nazw użytkowników podczas rejestracji? PHP/MySQL
- 14. Asterisk ulega awarii podczas rejestracji punktu końcowego.
- 15. Rails 3 - Devise: Jak pominąć "current_password" podczas edycji rejestracji?
- 16. Jak wysłać potwierdzenie e-mailem do Firebase podczas rejestracji?
- 17. przetwarza na JavaScript - „Błąd 209 nieważna sesja żeton” podczas rejestracji nowego użytkownika
- 18. Django Rest Framework - zwróć identyfikator użytkownika i token po rejestracji
- 19. Architektura dla łączenia wielu kont i rejestracji konta użytkownika
- 20. Dlaczego Scala potrzebuje oświadczenia def?
- 21. SQL - według oświadczenia
- 22. Implementacja oświadczenia majątkowego
- 23. oświadczenia przełącznika w Prologu
- 24. Wprowadź dane użytkownika do bazy danych po rejestracji
- 25. 800A0401 - Oczekiwany koniec oświadczenia
- 26. mysql trwale przygotowane oświadczenia
- 27. PDO Przygotowane oświadczenia - NULLs
- 28. warunkowe Oświadczenia różnica
- 29. mysqli_real_escape_string Oświadczenia przygotowane?
- 30. dmesg nie wyświetla oświadczenia printk
Udało mi się to. Jeszcze jedno pytanie, czy mogę zmienić roszczenie później w db, gdy zmiany atrybutów użytkownika? A jak mogę uzyskać dostęp do tych roszczeń w aplikacji? – MilanM
Powinieneś być w stanie uzyskać dostęp do tych szczegółów za pomocą właściwości nawigacji w encji ApplicationUser (user.Claims). Oto ciekawa lektura: http://stackoverflow.com/questions/22105583/why-is-asp-net-identity-identitydbcontext-a-black-box – pysco68
O.K. Udało mi się zdobyć roszczenie, ale jak mogę to zmienić? – MilanM