1

MVC 3 (かみそり) アプリケーションで .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) を取得するのはなぜですか?

それは正常ですか?

4

2 に答える 2

0

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

AccountController の「LogOn」アクション メソッドを確認してください。userName を UserId(GUID) 値に変更する原因の 1 つは、次のように、Auth-cookie を userName として「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);
}
于 2012-04-24T16:19:31.893 に答える
0

現在のユーザーを取得するには、Membership.GetUser() を使用するだけです。

于 2012-04-24T13:24:09.120 に答える