Ich habe ein Problem, die Ansprüche, insbesondere Rollen zu verstehen.ASP.NET Identitätsansprüche
Nach gibt mir zwei den Benutzer zugewiesenen Rollen
var roles = UserManager.GetRolesAsync(user.Id).Result;
Aber wenn ich die Ansprüche erhalten und durchlaufen, ich nur die erste Rolle bekommen. Ich bekomme nicht beide Rollen. Bitte beachten Sie, dass ich zum Zeitpunkt der Anmeldung keine Rollen in den Ansprüchen eingerichtet habe.
Aktionscode
IEnumerable<Claim> claims = null;
var identity = HttpContext.User.Identity as ClaimsIdentity;
if (identity != null && identity.Claims != null && identity.Claims.Any())
{
claims = identity.Claims;
}
return View(claims);
und die entsprechende Ansicht Code
@model IEnumerable<System.Security.Claims.Claim>
@{
ViewBag.Title = "Display Claims";
}
<h2>Display Claims</h2>
@if (Model == null)
{
<p class="alert-danger">No claims found</p>
}
else
{
<table class="table table-bordered">
<tr>
<th>Subject</th>
<th>Issuer</th>
<th>Type</th>
<th>Value</th>
</tr>
@foreach (var claim in Model.OrderBy(x => x.Type))
{
<tr>
<td>@claim.Subject.Name</td>
<td>@claim.Issuer</td>
<td>@Html.ClaimType(claim.Type)</td>
<td>@claim.Value</td>
</tr>
}
</table>
}
und hier ist der Ausgang. Was fehlt mir hier?
Und die Tabelle hat die beiden Rollen
Update # 1
I Vornamen und Nachnamen als Fern Ansprüche, angemeldet und das addierte beide Rollen werden jetzt angezeigt. Ich habe nichts geändert. So, jetzt bin ich mehr verwirrt ...
Hier der Anbieter Fern Ansprüche
public static class ClaimsUserInfoProvider
{
public static IEnumerable<Claim> GetClaims(ClaimsIdentity user, ApplicationUser applicationUser)
{
var claims = new List<Claim>();
claims.Add(CreateClaim(ClaimTypes.GivenName, applicationUser.FirstName + " " + applicationUser.LastName));
return claims;
}
private static Claim CreateClaim(string type, string value)
{
return new Claim(type, value, ClaimValueTypes.String, "RemoteClaims");
}
}
und die Login-Aktion hinzufügen, um den Ansprüchen Anbieter verwenden
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user == null)
{
ModelState.AddModelError("", "Invalid user name or password.");
}
else
{
var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
//add claims
identity.AddClaims(ClaimsUserInfoProvider.GetClaims(identity, user));
AuthenticationManager.SignOut();
AuthenticationManager.SignIn(new AuthenticationProperties
{
IsPersistent = model.RememberMe
}, identity);
if (!String.IsNullOrEmpty(model.ReturnUrl))
{
return Redirect(model.ReturnUrl);
}
return RedirectToAction("Index", "Home");
}
}
return View(model);
}
Diese Antwort kann helfen http://stackoverflow.com/questions/21688928/asp-net-identity-get-all-roles-of-logged-in-user –
Ich schaute dies vor, aber konnte es nicht verstehen . Für die letzte Stunde oder so habe ich darüber gelesen und jetzt macht das mehr Sinn. Ich habe Update # 1 in meinen Fragepost gesetzt. Beide Rollen werden jetzt angezeigt. Sie wissen nicht, warum diese nicht früher angezeigt wurden. –
Ich werde eine dumme Frage stellen - haben Sie die Cookies in einem Browser gelöscht? Haben Sie sich abgemeldet und wieder eingeloggt? – trailmax