gpt4 book ai didi

servicestack - MVC : ExecuteServiceStackFiltersAttribute: SessionFeature not present in time to set AuthSession? 的身份验证属性

转载 作者:行者123 更新时间:2023-12-04 05:28:33 25 4
gpt4 key购买 nike

我正在尝试在 MVC 应用程序中使用 OrmLiteAuthRepository(Postgres) 和 Memcached 作为缓存层在 Mono 3.2.x/Ubuntu 12.04 上创建一个简单的 Credentials Auth - 我正在使用 ServiceStack 库版本 4.0x

我正在使用自定义 session 对象,改编自 ServiceStack 的 SocialBootstrap 示例

什么是完美的:在 Controller 操作中获取 session ,例如:

 var currentSession = base.SessionAs<MyCustomUserSession>();

但是,我不想检查/验证 session 以及操作代码中可能包含或不包含的内容,我想使用一个属性,这导致我:

什么不起作用:使用操作名称上方的 Authenticate 属性:我的问题 (null AuthSession) 在尝试对 MVC 操作使用 [Authenticate] 属性时出现。

[Authenticate]
public ActionResult Index()
{
return View();
}

我已经设法将其缩小到 ExecuteServiceStackFiltersAttribute 执行此代码的事实,但 AuthSession 似乎尚未通过 SessionFeature 可用 - 所以此时 AuthSession 将始终为空:

var authAttrs = GetActionAndControllerAttributes<AuthenticateAttribute>(filterContext);
if (authAttrs.Count > 0 && ( ssController.AuthSession==null || !ssController.AuthSession.IsAuthenticated))
{
filterContext.Result = ssController.AuthenticationErrorResult;
return;
}

例如,如果我覆盖 AuthenticationErrorResult 并尝试从 SessionFeature 手动初始化 session 时抛出异常,它将抛出 "is life in the session”异常(当然,当我使用有效用户登录时):

public override ActionResult AuthenticationErrorResult
{
get
{
if (AuthSession == null)
{
// the Authenticate filter is triggered by ExecuteServiceStackFilters attribute
// which seems to always have AuthSession null
var session = SessionFeature.GetOrCreateSession<MyCustomUserSession>(AuthService.Cache);
if (session == null || (session != null && session.IsAuthenticated == false))
{
throw new Exception("Hmmm...dead as a dodo");
}
else
{
throw new Exception("there is life in the session:" + session.UserName);
}
}

var returnUrl = HttpContext.Request.Url.PathAndQuery;
return new RedirectResult(LoginRedirectUrl.Fmt(HttpUtility.UrlEncode(returnUrl)));

}
}

除了创建我的自定义属性/过滤器之外,是否有我应该尝试使用现有 ServiceStack 代码库的解决方案(要设置的属性)?如果我遗漏了什么,请告诉我。

无论如何,我对一个伟大的项目表示敬意。

最佳答案

尝试在 MVC 操作上使用 [Authenticate] 属性时出现我的问题(空 AuthSession)。
您是收到异常还是只是被重定向到“登录”页面?如果您没有收到异常,只是因为您未通过身份验证而被重定向,则以下方法可能有效。此外,您是否正在实现自己的自定义身份验证提供程序?如果是这样,您可以发布它的样本吗?

我认为您的代码示例中没有它,但我认为您的 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();
}
}

关于servicestack - MVC : ExecuteServiceStackFiltersAttribute: SessionFeature not present in time to set AuthSession? 的身份验证属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20462887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com