2

Visual Studio 2012 を使用して MVC 4 用に記述されたコードがあります...ロールベースの承認を達成しようとしていますが、何らかの理由で [Authorize] が機能していないようです....そして、コントローラーでも URL を介してページを取得できますアクションは [Authorize] 属性で初期化されます... 2番目に、次のコードをグローバルに配置して、アプリケーション全体を調べてみることもできます

 public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new System.Web.Mvc.AuthorizeAttribute());
        filters.Add(new HandleErrorAttribute());
    }

許可されていない人がアプリにアクセスできないため、私のルーティングのデフォルトはログインページに設定されています

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
        );
    }

そして、直接urlからaa()ビューを取得してテストしようとしています

[Authorize]
public class HomeController : Controller
{


    public ActionResult Index()
    {
        return View();
    }

    [Authorize]
    public ActionResult aa()
    {
        return View();
    }

ログインコード

[Authorize]
[InitializeSimpleMembership]
public class AccountController : Controller
{


    public ActionResult Login(string returnUrl)
    {
        ViewBag.ReturnUrl = returnUrl;

        return View();
    }

    [HttpPost]

    public ActionResult Login(LoginModel model, string returnUrl)
    {

        if (ModelState.IsValid && WebSecurity.Login(model._UserName, model._Password, persistCookie: false))
        {
            return RedirectToAction("Index", "Home");                
        }

        ModelState.AddModelError("", "The user name or password provided is incorrect.");

        return View(model);
    }

および web.config

 <authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
4

2 に答える 2

0

InitializeSimpleMembershipAccountsController ではなく、HomeController をデコレートする必要があります。HomeController/Index メソッドは Web サイト全体のエントリ ポイントであるため、[Authorize] を機能させるには、最初に SimpleMembership を初期化する必要があります。

于 2013-09-30T15:41:22.390 に答える