У меня есть существующая база данных членства ASP.NET, к которой я должен придерживаться. Я разрабатываю новый веб-сайт MVC5 в VS2013 (обновление 4) с использованием нового шаблона проекта MVC. Я изменил web.config, чтобы убедиться, что указан старый тип аутентификации. Я также модифицировал действие [HttpPost] для входа в систему, чтобы гарантировать, что я вхожу в систему с моей базой данных членства - он правильно регистрирует меня и генерирует cookie аутентификации по мере необходимости.ASP.NET MVC5 с существующей базой данных членства
Однако сайт по-прежнему перенаправляет меня на страницу входа, поскольку я не аутентифицирован. Request.IsAuthenticated показывает, что я не аутентифицирован. Что мне не хватает? Какие у меня варианты? EDIT: изменения web.config (только изменения):
<connectionStrings>
<add name="MyCS" connectionString="Data Source=sql1;Initial Catalog=MyDB;Persist Security Info=True;User ID=mysa;Password=mypw" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<authentication mode="Forms">
<forms timeout="20" name="seAdmin" loginUrl="~/Account/Login" />
</authentication>
<roleManager enabled="true" defaultProvider="CustomizedRoleProvider">
<providers>
<clear />
<add name="CustomizedRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="MyCS" applicationName="/seAdmin" />
</providers>
</roleManager>
<membership defaultProvider="CustomizedMembershipProvider">
<providers>
<clear />
<add name="CustomizedMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="MyCS" applicationName="/seAdmin" />
</providers>
</membership>
<machineKey validationKey="63A7C07B191BA3EF02DD4866C420DCAB81C9FFCCC617DE40ED6E2B89A2FC2BA3FA32C39D183FE0708E9279C14E58318D0C5E171C0AF802F154430679D1778485" decryptionKey="F5B9049DECB8C9A23B1D131E63D2ED5C15FF0AEB3C3E96FC" validation="SHA1" />
</system.web>
Войти Действие:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
if (Membership.ValidateUser(model.Email, model.Password))
{
FormsAuthentication.SetAuthCookie(model.Email, model.RememberMe);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1)
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
return View(model);
}
FilterConfig добавляет глобальный атрибут авторизации
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new AuthorizeAttribute() { Roles = "CWA" });
}
}
У вашего вопроса недостаточно информации, чтобы получить хороший ответ, также я не думаю, что переход от членства к личности - это просто, показать нам в коде, что вы изменили, а также взглянуть на это: http : //www.asp.net/identity/overview/migrations/migrating-an-existing-website-from-sql-membership-to-aspnet-identity –
Извините за недостаточно подробное описание. Я не перехожу из членства в Identity. То, что я хотел бы сделать, - реализовать аутентификацию членства в MVC 5 с использованием модифицированной версии шаблона проекта по умолчанию. Если такая модификация слишком сложна, я с удовольствием принимаю любую другую идею, кроме использования MVC 4 вместо MVC 5. Я обновлю свой вопрос с изменениями кода. – evgeny
Вы удалили запись «удалить» из раздела «Модули» в файле web.config, который удаляет модуль FormsAuthentication IIS? FYI, FormsAuthentication не имеет ничего общего с Членством. –