4

我真的迷失了如何使用 HttpContext.User。我到处都读到它对 FormAutherication 非常有用,但我只是看不到它是如何工作的。如果我做这样的事情:

ControllerContext.HttpContext.User = new GenericPrincipal(GetUser(username, password), roles);

ControllerContext.HttpContext.User 包含什么?以及如何以这种方式访问​​有关用户的信息?

我认为我有这样的动作:

public User GetUser(string username, string password)
    {
        try
        {
            var user = (from u in dm.Users
                        join r in dm.Roles
                        on u.Role_ID_FK equals r.RoleID
                        where u.Username.Equals(username) && u.Password.Equals(password)
                        select u).Single();

            return user;
        }
        catch (Exception e)
        {
            return null;
        }
    }

然后,如果我想要视图中的用户信息,例如用户名或角色,我可以在视图中调用 ControllerContext.HttpContext.User.Username。但这是不同的看待它的错误方式。

那么你们能给我一个正确的方向或发布一个链接到一个可以的网站吗?

4

2 回答 2

9

我不确定您要对发布的代码做什么,但这里有一些关于 HttpContext.User 的帮助。通俗地说,它代表请求特定页面的当前用户,实际上在您的控制器中,您可以将其称为“用户”而无需前缀。

User.Identity 将让您知道用户是否经过身份验证,如果是,他们的用户名以及他们如何进行身份验证(表单或 Windows)。

它通常用于获取请求页面的用户的用户名,以便您的控制器操作可以执行正确的职责。就像是:

public ActionResult Index()
{
    //you should probably use the [Authorize] attribute on the Action Method
    //but you could check for yourself whether the user is authenticated...
    if (!User.Identity.IsAuthenticated)
         return RedirectToAction("LogIn");

    MyUser u = repository.GetUser(User.Identity.Name); //lookup user by username
    ViewData["fullname"] = u.FullName; //whatever...
    return View();
}

在此示例中,如果用户尚未通过身份验证,他们将被重定向到 LogOn 页面,如果已经通过,Action 方法将使用 User.Identity.Name(这是他们登录时使用的用户名,或者他们的 Windows 登录名)从数据库中查找并返回一个 MyUser 对象的实例,并将用户的全名放入要显示的 ViewData 中。

于 2009-08-26T16:13:33.507 回答
4

在您的登录代码中使用:

FormsAuthentication.SetAuthCookie("userName", remeberMe);

设置经过身份验证的用户,然后您可以使用

<%= User.Identity.Name %>
<%= User.IsInRole("role") %>
于 2009-08-26T15:36:25.220 回答