我试图在MVC应用程序中使用OrmLiteAuthRepository(Postgres)和Memcached作为缓存层在Mono 3.2.x / Ubuntu 12.04上创建一个简单的Credentials Auth - 我使用的是ServiceStack库版本4.0x
我使用的是自定义会话对象,改编自ServiceStack的SocialBootstrap示例
完美无缺: 将会话置于控制器操作中,例如:
var currentSession = base.SessionAs<MyCustomUserSession>();
但是,我不想检查/验证会话以及在操作代码中可能包含或不包含的内容,我想使用属性,这导致我:
什么不起作用:使用操作名称上方的Authenticate
属性:
在尝试在MVC操作上使用null
属性时,我的问题(AuthSession
[Authenticate]
)会显示出来。
[Authenticate]
public ActionResult Index()
{
return View();
}
我设法将其缩小到ExecuteServiceStackFiltersAttribute
执行此代码的事实,但AuthSession
似乎尚未提供SessionFeature
- 所以{{{ 1}}此时将始终为null:
AuthSession
例如,如果我覆盖var authAttrs = GetActionAndControllerAttributes<AuthenticateAttribute>(filterContext);
if (authAttrs.Count > 0 && ( ssController.AuthSession==null || !ssController.AuthSession.IsAuthenticated))
{
filterContext.Result = ssController.AuthenticationErrorResult;
return;
}
并尝试抛出异常,如果我从AuthenticationErrorResult
手动初始化会话,它将抛出SessionFeature
异常(当然,当我使用有效用户登录:
"there is life in the session"
除了创建我的自定义属性/过滤器之外,我是否应该尝试使用现有的ServiceStack代码库来尝试(设置属性)?如果我遗失了什么,请告诉我。
无论如何,我对一个伟大的项目的问候。
答案 0 :(得分:1)
我的问题(null AuthSession)在尝试使用MVC操作的[Authenticate]属性时显示。
您是否收到例外情况或刚刚被重定向到“登录”页面?如果您没有收到异常并且因为未经过身份验证而被重定向,则以下内容可能有效。此外,您是否实现自己的自定义身份验证提供程序如果是这样,你可以发一个样本吗?
我认为您的代码示例中没有它,但我认为您的MVC Controller代码可能类似......
public class SomeController : ServiceStackController
{
[Authenticate]
public ActionResult Index()
{
return View();
}
}
您可以尝试将自定义MyCustomUserSession
添加到ServiceStackController的类型中吗?
public class SomeController : ServiceStackController<MyCustomUserSession>
{
[Authenticate]
public ActionResult Index()
{
return View();
}
}