在AuthProvider.IsAuthorized()中保存IAuthSession

时间:2012-10-18 16:43:17

标签: servicestack

我创建了自定义AuthUserSession和我的自定义AuthProvider,并在AuthFeature内注册了AppHostBase

身份验证过程由底层ASP.NET应用程序管理,该应用程序将会话(ASP.NET会话)放入我需要的信息中。

AuthProvider.IsAuthorized()内部我检查ASP.NET会话中的信息,如果用户已登录,则返回true或false。

现在我想在我的服务中使用我的自定义AuthUserSession

我在AuthUserSession中设置了AuthProvider.IsAuthorized()的属性,但是当我尝试使用SessionAs<MyCustomUserSession>()在我的服务中访问它们时,我得到空属性(即使在同一请求中),因为我不喜欢我认为不会保存AuthUserSession

我无法弄清楚如何从AuthUserSession保存AuthProvider.IsAuthorized()。 我尝试将自定义AuthProvider工具IRequiresRequestContext设为RequestContext.Get<IHttpRequest>().SaveSession(userSession, SessionExpiry);,但RequestContextnull

有办法吗?

感谢您的关注。

1 个答案:

答案 0 :(得分:1)

好的,我终于解决了这个问题。

我在自定义AuthProvider中添加了ICacheClient属性,并解决了AppHost内的依赖关系。

container.Register<ICacheClient>(new MemoryCacheClient());

Plugins.Add(new AuthFeature(
    () => new MyCustomUserSession(),
    new IAuthProvider[] 
        { new MyCustomAuthProvider(container.Resolve<ICacheClient>()) }
));

然后在AuthProvider.IsAuthorized()内部我使用以下方式保存会话:

Cache.CacheSet(SessionKey, userSession, SessionExpiry);