我声明要为我的 ASP.Net MVC 4 站点找出 SimpleMembership。我用自定义属性 AccountTypeId 扩充了 UserProfile。我已经使用增强属性更新了数据库表,并且可以在注册时将数据保存到数据库中。我对如何在用户登录后检索有关用户的数据感到有些困惑。
在我的帐户控制器中,我有一个登录操作,当用户登录时会发布到该操作。这是我的代码:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
var userName = WebSecurity.CurrentUserName;
var identityName = User.Identity.Name;
var currentuserid = WebSecurity.GetUserId(model.UserName);
var context = new UsersContext();
var user = context.UserProfiles.SingleOrDefault(u => u.UserId == currentuserid);
var accountTypeId = user.AccountTypeId;
return RedirectToLocal(returnUrl);
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
WebSecurity.CurrentUserName 和 User.Identity.Name 都是空字符串,但是,我可以使用 WebSecurity.GetUserId(model.UserName) 检索 UserId,因此可以检索用户数据,我可以获得 accountTypeId。
奇怪的是,当用户被重定向到登录页面后,从 .cshtml 页面调用 User.Identity.Name 时,它会显示在我的页面上。因此,在我的控制器的登录操作和目标页面之间的某个位置,User.Identity 正在设置数据。
我假设由于我通过了 WebSecurity.Login 检查,WebSecurity 将拥有有关登录用户的信息,但似乎并非如此。
我错过了什么?