単純なログインを追加したいと考えました。だから、私はデータベースの資格情報を追加し、それを照会し、ユーザー名とパスワードを取得すればログインすることが最善の方法だと思った。これはうまくいけば、dbを照会し、ログインして自宅にリダイレクトする。それから私はURLを介して家にアクセスしようとし、私はログインせずにそれを行うことができることに気づいた。それでは、私は権限のないユーザーがそうインクルードは、ログインページに戻ってリダイレクトする必要があり、それをアクセスさせたくないと私はホームコントローラの認証属性が機能しない
[Authorize]
属性を使用する必要があることを考え出しました。これは動作しません。コントローラでauthorizeを使用すると、アプリケーションでエラーが発生します。このような
<authentication mode="Forms">
<forms loginUrl="~/Login/Index" timeout="2880" /> <-- I have changed the login url to my login controller.
</authentication>
そして、私のログインコントローラ:それはこのようになりますweb.configファイルで
Object reference not set to an instance of an object.
。
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に何か不足していますか? よろしく!
一部の更新です。
<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>
そして、ハードコードされた資格情報とのMembershipProvider:
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;
}
それから私はこのような属性の権限を持つ私にHomeControllerを飾るみました:それは働いていなかったとして、私は、web.configファイルにこれを追加
[Authorize()]
public class HomeController : Controller
{}
しかし、まだ同じエラーが発生しています。私はログインすることができますが、私が "ホーム"に到達すると、以前と同じエラーが発生します。地球の名前でこれは何ですか?これに対する手がかりは?
よろしくお願いいたします。
何も渡されない 'Index'アクションがありますか?たとえば、空のフォームを表示するだけですか? – Buildstarted
申し訳ありませんどのようなインデックスアクションとはどこですか? – Tim