簡単なログインを追加したかったのです。したがって、データベースに資格情報を追加し、それをクエリして、ユーザー名とパスワードが一致する場合にログインするのが最善の方法だと思いました。これは機能しており、データベースにクエリを実行すると、ログインしてホームにリダイレクトされます。次に、URL からホームにアクセスしようとしたところ、ログインせずにアクセスできることに気付きました。それで、私は
[Authorize]
許可されていないユーザーがアクセスできないようにするため、ホームコントローラーの属性をログインページにリダイレクトする必要があります。これは動作しません。コントローラーで承認を使用すると、アプリケーションでエラーが発生します。
Object reference not set to an instance of an object.
web.config では、次のようになります。
<authentication mode="Forms">
<forms loginUrl="~/Login/Index" timeout="2880" /> <-- I have changed the login url to my login controller.
</authentication>
そして、このような私のログインコントローラー。
public ActionResult Index(UserModel model) <-- I query the db in the model.
{
if (!ModelState.IsValid)
{
return View(model);
}
if(!model.IsAdmin(model.UserName, model.Password))
{
ModelState.AddModelError("username", "you are not a admin");
return View(model);
}
FormsAuthentication.SetAuthCookie(model.UserName, false);
return RedirectToAction("Index", "Home");
}
では、この Authorize 属性をどのように使用するのが適切なのでしょうか? 私が使っている方法でも使用できますか?web.config に何か足りないものはありますか? よろしく!
これに一部更新。機能していなかったので、これをweb.configに追加しました:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="5">
</forms>
</authentication>
<membership defaultProvider="MyMembershipProvider">
<providers>
<clear/>
<add name="MyMembershipProvider" type="MyNamespace.MyMembershipProvider"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
userIsOnlineTimeWindow="2"
requiresUniqueEmail="false"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
applicationName="/" />
</providers>
</membership>
ハードコードされた資格情報を持つメンバーシッププロバイダー:
public class MyMembershipProvider : MembershipProvider
{
public override bool ValidateUser(string username, string password)
{
if (username.Equals("user", StringComparison.CurrentCultureIgnoreCase) && password.Equals("myPassword"))
return true;
else
return false;
}
次に、次のような Authorization 属性で HomeController を装飾してみました。
[Authorize()]
public class HomeController : Controller
{}
しかし、それでも同じエラーが発生します。ログインできるということですが、「ホーム」に到達すると、以前と同じエラーが発生します。これは地球上で何という名前ですか?! これの手がかりはありますか?!
よろしく!