1

ログイン時にユーザーを適切なページにリダイレクトしようとしています。そこで、彼らが役割を果たしているかどうかを確認し、メンバーシップに基づいてリダイレクトします。ただし、Roles.IsUserInRole()は機能していないようです。さらに、Roles.GetRolesForUser( "username")を使用すると、"System.String[]"が表示されます。私はmvc4のデフォルトのsimplemembershipを使用しています。データベースに作成され、適切なロールにリンクされているユーザーを確認できます。また、[役割の承認..]を使用すると正常に機能します。これが私のログインです(私の役割チェックとリダイレクトが追加されたほとんどのデフォルトのログインです。

public ActionResult Login(LoginModel model, string returnUrl)
        {
            if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
            {   //Get list of roles to print
                Session["FName"] = Roles.GetRolesForUser(model.UserName);
                if(Roles.IsUserInRole(model.UserName,"User")){
                    return RedirectToAction("Index","UserLanding");
                    Session["FName"] = "User in User group";
                }
                return RedirectToLocal(returnUrl);
            }

            // If we got this far, something failed, redisplay form
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
            return View(model);
        }

ユーザーが「user」グループにログインすると、UserLandingCongrollerIndexページにリダイレクトされると思います。ただし、常にホームページにリダイレクトされます。

4

2 に答える 2

2

リダイレクトが完了するまで、Roles.IsUserInRoleまたはGetRolesForUserにアクセスできないため、値が空になると思います。私はこれを役割ベースの承認の下で見つけました。誰かがロールを経由せずにDB内のロールに直接アクセスする方法があれば、それを使用できます。ただし、当面の間は、記事で提案されているように、追加のリダイレクトを実装するだけです。

于 2012-10-03T20:33:40.967 に答える
2

ユーザーを手動で検証して、特定のユーザーを認識するメンバーシップクラスにアクセスできるようにしてから、ロールなどのすべてのユーザー関連データにアクセスできます。

これは、ロールにアクセスする前にユーザーを手動で検証するために追加する必要のあるコードです。

 Membership.ValidateUser("Username", "PASSWORD");
 FormsAuthentication.SetAuthCookie(usermaster.Useremail, true);

これがお役に立てば幸いです。ラージ

于 2012-10-17T11:41:08.967 に答える