0

私はこのコードを持っています:

 public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            //I added this just to check if it returns true.
            bool check = Membership.ValidateUser(model.UserName, model.Password);
            if (Membership.ValidateUser(model.UserName, model.Password))
            {
                //trying to get get the name here.
                string name = Membership.GetUser().UserName;
                FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                    && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                {
                    return Redirect(returnUrl);
                }
                else
                {                        
                        string[] roles = Roles.GetRolesForUser(User.Identity.Name);
                        switch (roles[0])
                        {
                            case "Employee":
                                return RedirectToAction("Index", "Employee");
                            case "HR_Team":
                                return Redirect("");
                            case "Team_Lead":
                                return Redirect("");
                            case "Management":
                                return Redirect("");
                        }
                }
            }
            else
            {
                ModelState.AddModelError("", "The user name or password provided is incorrect.");
            }
        }

コードはまったく問題なく動作していましたが、なぜ正しく応答しなくなったのかわかりません。現在、ユーザー名とその役割を取得できません(おそらく、私が推測するユーザー名を取得していないためです)。私はそれがどのように起こったのかまったくわかりません。誰かがこの問題を取り除くのを手伝ってください。助けていただければ幸いです。よろしくお願いします。

4

1 に答える 1

1

フォーム認証 Cookie をまだ設定していないため、ユーザーを取得するときにユーザー名を指定したことを確認してください (リダイレクト後にのみ、引数を取らないこのオーバーロードを使用できます)。

Membership.GetUser().UserName;また、すでにユーザー名を持っている場合に呼び出すポイントは何model.UserNameですか?

同じことが役割を表します:

string[] roles = Roles.GetRolesForUser(model.UserName);

User.Identity.Name認証されたユーザーがまだいないため、LogOn メソッドで使用しないでください。

ユーザーに使用してもらいたい場合は、次のようにします。

var user = Membership.GetUser(model.UserName);

それ以外の:

var user = Membership.GetUser();
于 2013-08-26T15:36:38.850 に答える