#c# #asp.net-mvc #iis #httpcontext #authentication
#c# #asp.net-mvc #iis #httpcontext #аутентификация
Вопрос:
Итак, у меня проблема. У меня есть собственный класс CustomMembership, который я использую практически во всех моих приложениях MVC, и этот пользовательский класс наследует ‘MembershipProvider’.
каждое приложение имеет свою собственную базу данных пользователей, и поэтому информация о пользователе редко копируется в отдельных приложениях, если только у людей нет учетных записей в каждом из них. В любом случае, с момента их развертывания я все больше и больше понимаю, что HttpContext реплицируется в этих приложениях через IIS. У меня есть 2 основные проблемы:
- Кто-то войдет в систему как ‘user1’, но HttpContext возвращает имя пользователя для ‘user3’
- Пользовательский контекст из одного приложения будет находиться в кэше, сеансе или чем-то еще, а затем отображаться в другом приложении. Например. Я собирался протестировать приложение, и оно выдало мне исключение при выборе ролей пользователей, потому что имя пользователя, которое оно искало, существует не в этом приложении, а в другом, и по какой-то причине рекламируется как текущий контекст.
Это вызывает недоумение, мне было интересно, не упустил ли я чего-то или не смог что-то инициализировать. Ниже приведена копия раздела аутентификации пользователя в моей веб-конфигурации.
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<membership defaultProvider="CustomMembershipProvider">
<providers>
<clear />
<add name="CustomMembershipProvider" type="HRUpdate.App_Data.CustomMembershipProvider" connectionStringName="HRpimEntities" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
<!--<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/"/>-->
</providers>
</membership>
<roleManager defaultProvider="MyRoleProvider" enabled="true" cacheRolesInCookie="true">
<providers>
<clear />
<add name="MyRoleProvider" type="HRUpdate.App_Data.MyRoleProvider" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" writeExceptionsToEventLog="false" />
</providers>
</roleManager>
Комментарии:
1. Является ли ваш класс CustomMembership статическим классом со статическим членом Username?
2. Нет статического класса. Мой класс членства определяется как таковой: общедоступный класс CustomMembershipProvider: MembershipProvider {…}