2012-04-24 87 views
1

我在MVC 3(剃须刀)应用程序中使用.net成员资格。ASP.NET MVC 3和HttpContext.Current.User.Identity.Name

我实现了,我用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值(用户ID),而不是用户名?

这是正常的吗?

回答

0

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

+0

Membership.GetUser()为空,即使HttpContext.Current.User .Identity.IsAuthenticated是真的。 当然,在运行配置文件类之前,在另一个类中执行会员验证 'Membership.ValidateUser(email,password)' 我不知道什么是错的。我错过了什么吗? – Francesco 2012-04-24 13:59:14

0

如果使用默认的.NET会员,(FormAuthentication默认的GenericPrincipal,FormsIdentity),并已创建从默认的“互联网应用”模板,你的MVC应用程序,然后:

检查您的“登录”操作方法的AccountController。改变用户名的用户ID的一个可能的原因(GUID)值的验证cookie的设置为“ProviderUserKey”作为用户名,如下:

[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); 
}