Ключ компьютера членства в ASP.NET 4

У меня был рабочий сайт членства asp.net 4 около 5 месяцев, и сегодня я изменил регулярное выражение, чтобы ослабить ограничения пароля. Я по-прежнему могу создавать и получать доступ к новым учетным записям, но больше не могу получить доступ ни к одной из ранее зарегистрированных.

Я проверил базу данных и подтвердил, что они все еще там. Моей первоначальной мыслью был неверный пароль. Я проверил две учетные записи, для которых я знал пароль, и обе недоступны. Я попытался использовать опцию восстановления пароля, но когда я ввожу имя пользователя, мне говорят, что пользователь не существует.

Когда я проверяю базы данных и просматриваю таблицы членства и профилей, старые и новые пользователи, до и после изменения регулярного выражения, находятся в одной таблице. Это приводит меня к моему последнему открытию, которого у меня нет. Есть ли новый машинный ключ, который создает новых пользователей, но не может расшифровать старых, что делает их недоступными? Если да, то как я могу это исправить?


person Rob    schedule 02.01.2012    source источник
comment
Только что заметил, что идентификатор приложения отличается для новых пользователей в таблице членства. Может ли это быть причиной ошибки? Если да, то как поменять на старый?   -  person Rob    schedule 03.01.2012


Ответы (2)


Как и ваш комментарий, моей первой мыслью было, что ключ приложения был изменен. Этот ключ хранится в web.config/system.web/membership:

<membership>
  <providers>
    <clear/>
    <add name="AspNetSqlMembershipProvider"
      ...
      applicationName="YOUR_KEY_HERE" />
  </providers>
</membership>

Этот ключ позволяет различным приложениям с одним и тем же поставщиком членства (например, System.Web.Security.SqlMembershipProvider в вашем случае) использовать одну и ту же базу данных для хранения данных о членстве.

Один провайдер не увидит пользователей другого провайдера и наоборот, потому что они учитывают имя приложения при запросе к БД. Но когда вы смотрите на таблицу Users, вы можете не сразу заметить связь, поскольку SqlMembershipProvider использует Guid в таблице Users. Но это внешний ключ к таблице Applications, где вы можете найти имя приложения.

См. также: Всегда устанавливайте свойство applicationName при настройке членства в ASP.NET 2.0 и других поставщиков

person Michiel van Oosterhout    schedule 02.01.2012

Моя проблема была немного другой*, но я указал свой собственный машинный ключ в web.config. Подробнее см. здесь: http://msdn.microsoft.com/en-us/library/ff649308.aspx

(* мое приложение бродило с сервера на сервер в большой виртуализированной ферме серверов, поэтому при каждом прыжке менялось машинный ключ, из-за чего приложение не могло прочитать файлы cookie, которые оно ранее установило.)

person mshthn    schedule 02.01.2012
comment
К счастью, это не имело никакого отношения к машинному ключу. Это было изменение имени приложения, потому что я сделал копию сайта, чтобы внести некоторые важные изменения, и загрузил из копии, чтобы новые участники могли получить доступ к своим учетным записям, а предыдущие участники не могли. Я исправил это, добавив имена обоих приложений в файл web.config, и вуаля, все заработало! - person Rob; 25.02.2012