asp.net mvc中的用户身份

时间:2010-10-13 19:22:55

标签: asp.net-mvc

我需要在我的视图中访问用户的名称和ID。当我使用Page.User.Identity.Name时,我会收到用于验证它的电子邮件。这就是我从控制器验证用户身份的方法:

if (!userService.ValidateUser(model.Email, model.Password))
      FormsAuthentication.SetAuthCookie(model.Email, false);

我怎样才能做到:Page.User.Identity.UserIdPage.User.Identity.FirstName

2 个答案:

答案 0 :(得分:3)

基本MVC控制器具有您可以在操作中访问的User属性。只需将您需要的属性附加到视图模型中即可。

public ActionResult Index()
{  
   var user = new UserViewModel();
   user.FirstName = this.User.Identity.FirstName;
   ViewData["UserDetails"] = user;
   // ...
   return View(theOtherModel);
}

在site.master中:

<% var userModel = ViewData["UserDetails"] as UserViewModel; %>
Hello <%: userModel.FirstName  %>!

答案 1 :(得分:3)

肖恩,这是一个想法:

首先,您可以创建一个动作过滤器,以便在ViewData集合中注入代表您的用户的对象。您可以将此属性应用于控制器或操作。

public class AddUserToViewDataAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var email = filterContext.HttpContext.User.Identity.Name;

        var user = _userService.GetUser(email);

        filterContext.Controller.ViewData["CurrentUser"] = user;
    }
}

当然应该做一些改进,这只是一个想法。

另一个想法是创建一个基本控制器类(以便控制器扩展它),并且在该控制器中你可以有一个方法(例如GetCurrentUser)与此过滤器中的相同(即从数据库加载用户) 。您可以应用一些缓存,例如,将用户对象保存在HttpContext.Items集合中。

干杯。