MVC 5 Zugang Forderungen Identität Benutzerdaten
Ich bin die Entwicklung einer MVC 5 web-Anwendung mit Entity Framework 5 die Datenbank Zuerst Ansatz. Ich bin mit OWIN für die Authentifizierung von Benutzern. Unten zeigt meinen Login-Methode, die in meinem Konto Controller.
public ActionResult Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = _AccountService.VerifyPassword(model.UserName, model.Password, false);
if (user != null)
{
var identity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, model.UserName), }, DefaultAuthenticationTypes.ApplicationCookie, ClaimTypes.Name, ClaimTypes.Role);
identity.AddClaim(new Claim(ClaimTypes.Role, "guest"));
identity.AddClaim(new Claim(ClaimTypes.GivenName, "A Person"));
identity.AddClaim(new Claim(ClaimTypes.Sid, user.userID)); //OK to store userID here?
AuthenticationManager.SignIn(new AuthenticationProperties
{
IsPersistent = model.RememberMe
}, identity);
return RedirectToAction("Index", "MyDashboard");
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
//If we got this far, something failed, redisplay form
return View(model);
}
Wie Sie sehen können ich bin die Schaffung einer "ClaimsIdentity" und das hinzufügen von mehreren behauptet es zu können, dann übergabe an OWIN mit der AuthenticationManager durchzuführen, die sich anmelden.
Das problem, das ich habe ist, dass ich bin mir nicht sicher, wie Sie auf die Forderungen in den rest meiner Bewerbung, entweder im Regler oder in der Razor-Ansichten.
Hatte ich versucht den Ansatz aufgeführt, die in diesem tutorial
Beispielsweise, ich habe diese in meinem Controller-code in einem Versuch, Zugriff auf die übergebenen Werte in die Forderungen, jedoch der Benutzer.Forderungen ist gleich null
var ctx = HttpContext.GetOwinContext();
ClaimsPrincipal user = ctx.Authentication.User;
IEnumerable<Claim> claims = user.Claims;
Vielleicht bin ich hier etwas fehlt.
UPDATE
Basierend auf Darin die Antwort, ich habe seinen code aber noch sehe ich nicht, den Zugang zu den Ansprüchen. Bitte siehe screenshot unten zeigt, was ich sehe, wenn schwebte über Identität.Ansprüche.
InformationsquelleAutor der Frage tcode | 2014-01-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
InformationsquelleAutor der Antwort Darin Dimitrov
Können Sie dies auch tun:
Update
Weitere Erklärung als pro-Kommentare.
Wenn Sie Benutzer in Ihrem system wie folgt:
Sollten Sie automatisch haben einige Forderungen aufgefüllt Bezug auf die Identität.
Hinzufügen kundenspezifische Forderungen, nachdem ein Benutzer authentifiziert, können Sie dies tun, wie folgt:
Forderungen können wiedergegeben werden, als Darin beantwortet hat oder oben ich habe.
Forderungen sind persistent, wenn Sie anrufen, unten vorbei an der Identität, in:
Dieser Artikel beschreibt diese im detail und ist spezifisch für MVC 5, den anderen Artikeln, die ich kenne richten sich an MVC 4.
http://kevin-junghans.blogspot.co.uk/2013/12/using-claims-in-aspnet-identity.html
InformationsquelleAutor der Antwort hutchonoid
Ich meine eigenen erweiterten Klasse zu sehen, was ich brauche, also wenn ich in meinem controller, oder ist meine Ansicht, ich nur hinzufügen, die mit my-namespace, so etwas wie dieses:
In meinem controller:
In meinem Rasiermesser:
InformationsquelleAutor der Antwort Jesus Padilla
Dies ist eine alternative, wenn Sie nicht wollen, zu verwenden Forderungen die ganze Zeit. Werfen Sie einen Blick auf diese tutorial von Ben Foster.
Dann können Sie ein Basis-controller.
In Sie-controller tun würde:
InformationsquelleAutor der Antwort Quentin
Können Sie das auch tun.
InformationsquelleAutor der Antwort angularsen
Weiter zu berühren, Darin die Antwort, die Sie bekommen können, um Ihre spezifischen Ansprüche mit der FindFirst Methode:
InformationsquelleAutor der Antwort Eric Bridges
Jedoch ist es besser, fügen Sie die Ansprüche innerhalb der "GenerateUserIdentityAsync" - Methode, vor allem wenn regenerateIdentity in den Autostart.Auth.cs aktiviert ist.
InformationsquelleAutor der Antwort Basil Banbouk
Denken Sie daran, dass, um die Abfrage der IEnumerable-Sie brauchen, um Referenz-system.linq.
Es wird Ihnen das extension-Objekt benötigt zu tun:
InformationsquelleAutor der Antwort Marc Sedote Sossou
kürzeste und vereinfachte version von @Rosdi Kasim würde die Antwort ist
Claimname
ist der Anspruch, den Sie abrufen möchten ich.e wenn Sie sind auf der Suche nach "StreedAddress" behaupten, dann ist die obige Antwort wird sein, wie dieseInformationsquelleAutor der Antwort noman zafar
Entsprechend der ControllerBase-Klasse, erhalten Sie die Ansprüche für den Benutzer zur Ausführung der Aktion.
hier ist, wie Sie es tun können, in der 1. Zeile.
InformationsquelleAutor der Antwort conterio
InformationsquelleAutor der Antwort Felipe Deveza