Подтвердить что ты не робот

Проверка подлинности форм в web.config

Я использую MVC3 и поместил аутентификацию пользователя в файл web.config. Это делается для обхода аутентификации sqlserver.

как показано ниже в web.config:

<authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" >
        <credentials passwordFormat="Clear">
          <user name="test123" password="test123" />
        </credentials>
      </forms>
</authentication>

Я пробовал логин с указанным идентификатором пользователя и паролем, я получаю ошибку на странице как

Вход был неудачным. Исправьте ошибки и повторите попытку.

* The user name or password provided is incorrect.

когда я отлаживаю файл AccountController.cs, не выполняя метод MembershipService.ValidateUser(model.UserName, model.Password).

4b9b3361

Ответ 1

Если вы изучите стандартные файлы ASPC MVC 3 AccountController.cs и AccountModels.cs, вы узнаете, что используется MembershipProvider.ValidateUser внутри (через Membership.Provider). Если вы хотите сохранить пароль в web.config, вы должны использовать FormsAuthentication.Authenticate.

Например:

public class AuthorizationController : Controller
{
    public ActionResult LogOn()
    {
        return View("LogOn");
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult LogOn(string userName, string password, 
        bool rememberMe, string returnUrl)
    {
        if (!ValidateLogOn(userName, password))
            return View("LogOn");

        FormsAuthentication.SetAuthCookie(userName, rememberMe);

        if (!string.IsNullOrEmpty(returnUrl))
            return Redirect(returnUrl);
        else
            return RedirectToAction("Index", "News");

    }

    private bool ValidateLogOn(string userName, string password)
    {
        if (string.IsNullOrEmpty(userName))
            ModelState.AddModelError("username", "User name required");

        if (string.IsNullOrEmpty(password))
            ModelState.AddModelError("password", "Password required");

        if (ModelState.IsValid && !FormsAuthentication.
            Authenticate(userName, password))
            ModelState.AddModelError("_FORM", "Wrong user name or password");

        return ModelState.IsValid;
    }

    public RedirectToRouteResult LogOff()
    {
        FormsAuthentication.SignOut();

        return RedirectToAction("LogOn");
    }
}