2012-04-24 123 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); 
}