これはおそらく非常に単純な問題ですが、解決策が見えず、本当に悩み始めています!
ユーザー名とパスワードを入力してログインする必要がある学習支援を目的とした単純な ASP.Net MVC2 アプリケーションがあります。これらは、aspnet_regsql ツールを使用して作成および構成されたメンバーシップ プロバイダーを使用して DB に対して認証されます。
Web構成は次のようになります(これは正しいと思います...ただし、フォーム認証ビットについては不明かもしれません):
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2380"/>
</authentication>
<membership>
<providers>
<clear />
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
</providers>
</membership>
<profile>
<providers>
<clear />
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
</providers>
</profile>
<roleManager enabled="false">
<providers>
<clear />
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
ログ プロシージャを実行するビューのコードは次のようになります。
public ActionResult LogOn()
{
return View();
}
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid){
if (MembershipService.ValidateUser(model.UserName, model.Password)){
FormsService.SignIn(model.UserName, model.RememberMe);
if (!String.IsNullOrEmpty(returnUrl)){
return Redirect(returnUrl);
}
else{
return RedirectToAction("Index", "Home");
}
}
else{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
セキュリティの適用が必要なコントローラの各メソッドは、次のようにタグ付けされます。
[Authorize]
public ActionResult New() {
return View();
}
[Authorize]
[HttpPost]
public ActionResult New(FormCollection collection) {
//do something...
}
また、コントローラ クラスにもタグを付けました[Authorize]
。
ただし、新しいアイテムを作成するか、既存のアイテムを編集してサイトにログインすると、ログイン後すぐにログアウトされます。
コントローラーのプライベート メソッドもマークする必要があり[Authorize]
ますか?これにより、誰かがログアウトされますか?
ご協力いただきありがとうございます、
モリス