代码之家  ›  专栏  ›  技术社区  ›  Shawn Mclean

ASP.NET MVC中的用户标识

  •  0
  • Shawn Mclean  · 技术社区  · 15 年前

    我需要获取用户名和ID才能在我的视图中访问。当我使用 Page.User.Identity.Name ,我收到了我用来验证它的电子邮件。这就是我如何从控制器对用户进行身份验证的方法:

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

    我怎样才能做到: Page.User.Identity.UserId 或 Page.User.Identity.FirstName ?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Ryan    15 年前

    基本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  %>!
    
        2
  •  3
  •   uvita    15 年前

    肖恩,有个想法:

    首先,可以创建一个操作筛选器,以便在 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 收集。

    干杯。