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

あなたは上記のクラスで見ることができるように、私は、メンバーシップユーザーを取得するにはGUIDとしてHttpContext.Current.User.Identity.Nameをキャストする必要があります。

質問は、なぜ、ログインの検証後、HttpContext.Current.User.Identity.Nameで私はGUID値(userID)を取得し、ユーザー名を取得しないのですか?

これは正常ですか?

答えて

0

Membership.GetUser()を使用して現在のユーザーを取得してください。

+0

Membership.GetUser()がnullであってもHttpContext.Current.User .Identity.IsAuthenticatedがtrueです。 もちろん、プロファイルクラスを実行する前に、別のクラスでメンバーシップの検証を実行します。 'Membership.ValidateUser(email、password) ' 何が問題なのか分かりません。何か不足していますか? – Francesco

0

そして、「インターネットアプリケーション」テンプレートを使用すると、デフォルトの.NETメンバーシップ、(デフォルトGenericPrincipal、FormsIdentityとFormAuthentication)を使用していると、デフォルトからあなたのMVCアプリケーションを作成した場合:

をお使いのログオン "アクションメソッドをチェックAccountControllerのユーザーID(GUID)の値にユーザー名を変更する1つの原因は次のように、ユーザ名として「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); 
} 
関連する問題