Nếu có thuộc tính chỉ cụ thể mà bạn cần phải nhận được, bạn có thể thêm chúng như tuyên bố trong lớp ApplicationUser của bạn như ví dụ sau:
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser, int> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
userIdentity.AddClaim(new Claim("FullName", this.FullName));
// or use the ClaimTypes enumeration
return userIdentity;
}
này bị dây lên từ lớp Startup.Auth:
SessionStateSection sessionStateSection = ConfigurationManager.GetSection("system.web/sessionState") as SessionStateSection;
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/account/login"),
CookieName = sessionStateSection.CookieName + "_Application",
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser, int>
(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentityCallback: (manager, user) => user.GenerateUserIdentityAsync(manager),
getUserIdCallback: (id) => (id.GetUserId<int>())
)
}
});
Sau đó, bạn có thể truy cập yêu cầu bồi thường (trong một cái nhìn hoặc trong một bộ điều khiển):
var claims = ((System.Security.Claims.ClaimsIdentity)User.Identity).Claims;
var claim = claims.SingleOrDefault(m => m.Type == "FullName");
Không có hình thức xác thực vé ở đây.
Nếu bạn muốn các chi tiết người dùng đầy đủ có sẵn, bạn luôn có thể tạo ra một phương pháp mở rộng như sau:
public static ApplicationUser GetApplicationUser(this System.Security.Principal.IIdentity identity)
{
if (identity.IsAuthenticated)
{
using (var db = new AppContext())
{
var userManager = new ApplicationUserManager(new ApplicationUserStore(db));
return userManager.FindByName(identity.Name);
}
}
else
{
return null;
}
}
Và gọi nó là như thế này:
@User.Identity.GetApplicationUser();
Tôi muốn giới thiệu bộ nhớ đệm nếu bạn Tuy nhiên, gọi lại lần này.
tuyệt vời! !! Điều này tiết kiệm cuộc sống của tôi –