ASP.net MVC приложение выходит из системы очень быстро после входа в систему - PullRequest
1 голос
/ 18 апреля 2011

Это, вероятно, очень простая проблема, но я не вижу решения, и оно действительно начинает меня беспокоить!

У меня есть простое приложение ASP.Net MVC2, которое предназначено в качестве учебного пособия, которое требует от пользователейВойдите, указав имя пользователя и пароль.Они аутентифицируются в БД с использованием поставщика членства, который был создан и настроен с использованием инструмента aspnet_regsql.

Веб-конфигурация выглядит следующим образом (что я считаю правильным ... может быть, не уверен насчет бита аутентификации форм):

<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] и не приведет ли это к выходу из системы?

Спасибо за помощь,

Morris

...