【问题标题】:ASP.NET MVC 3 and HttpContext.Current.User.Identity.NameASP.NET MVC 3 和 HttpContext.Current.User.Identity.Name
【发布时间】:2012-04-24 11:46:42
【问题描述】:

我在 MVC 3 (razor) 应用程序中使用 .net 成员资格。

我已经实现了一个自定义配置文件类,我在其中使用 HttpContext.Current.User.Identity.Name 来获取会员用户。

public class UserProfile : ProfileBase
{
    static public UserProfile CurrentUser
    {
        get {
               return (UserProfile)(ProfileBase.Create(Membership.GetUser(new Guid(HttpContext.Current.User.Identity.Name)).UserName)); 
            }
    }

    public string FirstName
    {
        get { return ((string)(base["FirstName"])); }
        set { base["FirstName"] = value; Save(); }
    }

    public string LastName
    {
        get { return ((string)(base["LastName"])); }
        set { base["LastName"] = value; Save(); }
    }
}

正如您在上面的课程中看到的,我必须将 HttpContext.Current.User.Identity.Name 转换为 GUID 才能获取会员用户。

问题是,为什么在登录验证后,在 HttpContext.Current.User.Identity.Name 我得到的是 GUID 值(userID)而不是用户名?

这正常吗?

【问题讨论】:

    标签: asp.net-mvc-3 asp.net-membership


    【解决方案1】:

    只需使用 Membership.GetUser() 来获取当前用户。

    【讨论】:

    • Membership.GetUser() 为 null,即使 HttpContext.Current.User.Identity.IsAuthenticated 为真。当然在运行配置文件类之前,在另一个类中我执行成员身份验证Membership.ValidateUser(email, password) 我不知道出了什么问题。我错过了什么吗?
    【解决方案2】:

    如果您使用默认的 .NET 成员资格(FormAuthentication with default GenericPrincipal, FormsIdentity)并且您已经从默认的“Internet 应用程序”模板创建了 MVC 应用程序,那么:

    检查 AccountController 的“LogOn”操作方法。将 userName 更改为 UserId(GUID) 值的一种可能原因是将 Auth-cookie 设置为 'ProviderUserKey' 作为 userName,例如:

    [HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            if (Membership.ValidateUser(model.UserName, model.Password))
            {
                var user = Membership.GetUser(model.UserName);
                FormsAuthentication.SetAuthCookie(user.ProviderUserKey.ToString(), model.RememberMe);
    
                //...
                return Redirect(Url.Content("~/"));
            }
            else{
                ModelState.AddModelError("", "The user name or password provided is incorrect.");
            }
        }
    
        // If we got this far, something failed, redisplay form
        return View(model);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 2011-05-15
      • 2012-07-04
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多