大家好,我正在使用自定义会员提供程序和自定义角色提供程序。它正在正确使用这些登录。我还实现了自己的 Membership 用户对象,这样我就可以访问其他用户信息,并且每次更改页面时都不需要加载所有数据,但我目前无法使其正常工作。下面是我的用户对象:
public class User : MembershipUser
{
[Required(ErrorMessage = "Username cannot be blank")]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required(ErrorMessage = "Password cannot be blank")]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Display(Name = "User ID")]
public long UserID { get; set; }
[Display(Name = "Family Name")]
[StringLength(50, ErrorMessage = "Family name cannot be longer than 50 characters")]
public string FamilyName { get; set; }
[Display(Name = "Given Name")]
[StringLength(50, ErrorMessage = "Given name cannot be longer than 50 characters")]
public string GivenName { get; set; }
public Company Company { get; set; }
public virtual IIdentity Identity { get; set; }
}
当用户登录时,我调用以下登录方法:
[AllowAnonymous]
[HttpPost]
public ActionResult Login(User model, string returnUrl)
{
FormsAuthentication.SignOut();
if(Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, true);
return RedirectToAction("Index", "");
}
ViewBag.Message = "Failed to login";
return View();
}
但是当我调用HttpContext.User
索引时,它只包含名称/ID,而不是我的用户对象的其余部分。我需要创建自定义FormAuthentication
对象吗?还是将所有这些用户信息存储在HttpContext.Session
对象中的标准过程?或者让我的用户扩展System.Security.Principle.IPrinciple
?甚至在Controller.TempData
? 或者其他我不熟悉的地方。我不想每次都访问数据库来加载用户数据。
抱歉,如果这些是明显的问题,我对 Web 开发还很陌生,并且不确定做这些事情的通用方法是什么。尝试使用 in build Authorize 属性。