我在获取 ServiceStack [Authentication] 属性以在 ASP.Net MVC4 控制器中工作时遇到问题,即使正确提交了登录详细信息,具有该属性的页面/操作方法也会将用户重定向到登录页面。
我遵循了 SocialBootstrapApi 示例,不同之处在于所有身份验证 Web 服务调用都是从控制器进行的:
this.CreateRestClient().Post<RegistrationResponse>("/register", model);
到目前为止我做过的其他事情:
- 使用我自己的用户会话实现子类化 AuthUserSession(与示例没有太大区别,但使用我自己的 User 表实现)
- 在我的 BaseController 上继承 ServiceStackController,覆盖默认登录 URL
- 使用我的用户会话实现在 AppHost 中启用身份验证功能
注册确实有效,用户身份验证逻辑有效(即使会话不存在),我可以在请求中看到ss-id
和ss-pid
cookie。
所以我的完整问题清单:
- 如何使 [Authenticate] 属性起作用(或者,我做错了什么)?
- 如何在 MVC 控制器中保存和重用用户会话?目前
this.UserSession
始终为空。 - 如何注销用户?
this.CreateRestClient().Get<AuthResponse>("/auth/logout");
似乎不起作用。
更新 1:在提交任何凭据之前,当我尝试加载受保护的页面(具有 [Authenticate] 属性的页面)时,会创建
会话 cookie(ss-id
和)。ss-pid
这是预期的行为吗?
更新 2:
我可以看到会话保存在 中MemoryCacheClient
,但是尝试通过this.Cache.Get<CustomUserSession>(SessionKey)
返回 null 在基本控制器中检索它(其中 SessionKey 就像urn:iauthsession:1
:)