7

私は現在 MVC4 を学んでおり、Pro ASP NET MVC4 第 4 版の本に従って、Sports Store プロジェクトを作成しています。

私は常に Web フォームで開発してきましたが、フォーム認証が MVC4 でどのように機能しているかを理解しようとしています。

これが私が達成したことです:

Web.Config

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

AccountController ログイン アクション:

[HttpPost]
        public ActionResult Login(LoginViewModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                if (authProvider.Authenticate(model.UserName, model.Password))
                {
                    return Redirect(returnUrl ?? Url.Action("Index", "Admin"));
                }
                else
                {
                    ModelState.AddModelError("", "Incorrect username or password");
                    return View();
                }
            }
            else
            {
                return View();
            }
        }

認証プロバイダー:

public bool Authenticate(string username, string password) {
            bool result = FormsAuthentication.Authenticate(username, password);
            if (result)
            {
                FormsAuthentication.SetAuthCookie(username, false);
            }

            return result;

        }

AuthCookie を設定していますが、AccountController から他のコントローラーとアクションを保護する方法を知りたいです。

アプリケーションには AdminController というコントローラーがあり
、次の {controller/action} の下で製品と製品リストを編集できます。

管理者/インデックス

したがって、理論を誤解していなければ、ユーザーが AccountController にログインしていない場合、宣言時に [Authorize] タグを使用してアクションを呼び出すことはできません。

 public class AdminController : Controller
    {
        private IProductRepository repository;


        public AdminController(IProductRepository repo)
        {
            repository = repo;
        }

       [Authorize]
        public ActionResult Index()
        {

            return View(repository.Products);
        }
   }

問題は、ログインを導入することなく、管理コントローラーのインデックス アクションを問題なく呼び出すことができることです。

これがどのように機能するかを理解するには、いくつかのガイダンスが必要です。私はいくつかの調査を行いましたが、何も見つかりませんでした。本はこのトピックをカバーしていません.

前もって感謝します。

編集: Chrome ブラウザを閉じて、何も変更せずに作業しました。私はタブで作業していましたが、デバッグを停止して開始してもCookieがアクティブだったと思います。

4

1 に答える 1