tutorial - web forms c# ejemplos
Acceda a los valores de reclamaciĆ³n en el controlador en MVC 5 (2)
He utilizado la autenticación OWIN en mi aplicación.
Login Action
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, result.UserFirstName));
claims.Add(new Claim(ClaimTypes.Sid, result.UserID.ToString()));
var identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
Quiero acceder al nombre de usuario y al ID de usuario desde una acción diferente. ¿Cómo puedo acceder a los valores que se agregan en las reclamaciones?
Actualizar lo he intentado
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, result.UserFirstName + " " + result.UserLastName));
claims.Add(new Claim(ClaimTypes.Sid, result.UserIDNumber.ToString()));
var identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
var authenticationManager = Request.GetOwinContext().Authentication;
authenticationManager.SignIn(identity);
var claimsPrincipal = new ClaimsPrincipal(identity);
Thread.CurrentPrincipal = claimsPrincipal;
Puedo ver los valores dentro de la ventana rápida. Pero a pesar de que no pude acceder al valor. ¿Cómo obtener el valor?
Aquí hay otro ejemplo, con tipos de reclamos personalizados también:
Iniciar sesión:
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, user.Name, ClaimValueTypes.String),
new Claim(ClaimTypes.Email, user.Email ?? string.Empty, ClaimValueTypes.Email),
new Claim(ClaimTypes.PrimarySid, user.Id.ToString(), ClaimValueTypes.Integer),
new Claim(CustomClaimTypes.SalesId, user.SalesId.ToString(), ClaimValueTypes.Integer)
};
var claimsIdentity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationManager.SignIn(claimsIdentity);
Reclamaciones personalizadas:
public static class CustomClaimTypes
{
public const string SalesId = "SalesId";
}
Métodos de extensión:
public static class IdentityExtensions
{
public static int GetSalesId(this IIdentity identity)
{
ClaimsIdentity claimsIdentity = identity as ClaimsIdentity;
Claim claim = claimsIdentity?.FindFirst(CustomClaimTypes.SalesId);
if (claim == null)
return 0;
return int.Parse(claim.Value);
}
public static string GetName(this IIdentity identity)
{
ClaimsIdentity claimsIdentity = identity as ClaimsIdentity;
Claim claim = claimsIdentity?.FindFirst(ClaimTypes.Name);
return claim?.Value ?? string.Empty;
}
}
Entonces se puede acceder de esta manera:
User.Identity.GetSalesId();
User.Identity.GetName();
Thread.CurrentPrincipal
configurar su Thread.CurrentPrincipal
después del inicio de sesión, es decir,
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, result.UserFirstName));
claims.Add(new Claim(ClaimTypes.Sid, result.UserID.ToString()));
var identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
var claimsPrincipal = new ClaimsPrincipal(identity);
// Set current principal
Thread.CurrentPrincipal = claimsPrincipal;
Entonces lo siguiente recuperará los valores.
//Get the current claims principal
var identity = (ClaimsPrincipal)Thread.CurrentPrincipal;
// Get the claims values
var name = identity.Claims.Where(c => c.Type == ClaimTypes.Name)
.Select(c => c.Value).SingleOrDefault();
var sid = identity.Claims.Where(c => c.Type == ClaimTypes.Sid)
.Select(c => c.Value).SingleOrDefault();