私は現在 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がアクティブだったと思います。