У меня возникла проблема с получением атрибута ServiceStack [Аутентификация] для работы в контроллере ASP.Net MVC4, страницах/методах действий с атрибутом, чтобы перенаправить пользователей на страницу входа даже после правильной отправки данных для входа.
Я следовал примеру SocialBootstrapApi, с той разницей, что все вызовы веб-службы аутентификации сделаны из контроллеров:
this.CreateRestClient().Post<RegistrationResponse>("/register", model);
Другие вещи, которые я сделал до сих пор:
- Используйте мой собственный подпрограмм для реализации пользовательского сеанса AuthUserSession (не слишком отличный от примера, но используя мою собственную реализацию таблицы User)
- Наследовать ServiceStackController на моем BaseController, переопределяя URL-адрес входа по умолчанию
- Включить функцию Auth в AppHost с моей реализацией пользовательского сеанса
Регистрация действительно работает, логика пользовательской авторизации работает (хотя сеанс не сохраняется), и я могу видеть куки ss-id
и ss-pid
в запросе.
Итак, мой полный список вопросов:
- Как заставить атрибут [Аутентификация] работать (или, что я делал неправильно)?
- Как сохранить и повторно использовать сеанс пользователя в контроллере MVC? На данный момент
this.UserSession
всегда имеет значение null. - Как мне выйти из системы?
this.CreateRestClient().Get<AuthResponse>("/auth/logout");
, похоже, не работает.
Обновление 1:
Файлы cookie сеанса (ss-id
и ss-pid
) создаются при попытке загрузить защищенную страницу (те, у которых есть атрибут [Authenticate]), до того, как будут переданы какие-либо учетные данные. Это ожидаемое поведение?
Обновление 2:
Я вижу, что сеанс сохранен в MemoryCacheClient
, однако попытка получить его в базовом контроллере с помощью this.Cache.Get<CustomUserSession>(SessionKey)
возвращает значение null (где SessionKey имеет вид: urn:iauthsession:1
)