Я хотел добавить простой логин.Поэтому я подумал, что лучшим способом было бы добавить учетные данные в базу данных, а затем запросить их, и, если имя пользователя и пароль совпадают, вы вошли в систему. Это работает, хорошо, это запрашивает базу данных, и вы входите в систему и перенаправляетесь на дом.Затем я попытался получить доступ к дому через 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;
}
Затем я попытался украсить свой HomeController с атрибутом Authorization, напримерэто:
[Authorize()]
public class HomeController : Controller
{}
Но все равно получаю ту же ошибку.Я имею в виду, что могу войти в систему, но когда я попадаю в «Домой», я получаю ту же ошибку, что и раньше.Что в земле зовут это ?!Есть какие-нибудь ключи к этому?!
С уважением!