验证MVC的属性:ExecuteServiceStackFiltersAttribute:SessionFeature没有及时设置AuthSession?

时间:2013-12-09 03:57:42

标签: servicestack

我试图在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代码库来尝试(设置属性)?如果我遗失了什么,请告诉我。

无论如何,我对一个伟大的项目的问候。

1 个答案:

答案 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();
    }
}