0

根据这个问题,有一种方法可以更改 ServiceStack 身份验证服务的重定向 URL。

但是,当从这里继承我的控制器时ServiceStackController<AuthUserService>显然不起作用,因为 ServiceStackController 对重定向 URL 进行了硬编码,并且在AuthFeature注册中更改它对其没有影响。

我的问题是:

1)解决这个问题的正确方法是什么?

有一个选项可以覆盖LoginRedirectUrl,是吗?Authenticate 属性HtmlRedirect或 AuthFeature 属性的意义何在?

2) 完全的目的是ServiceStackController什么?

3)我已经放置[Authenticate]了我的基本控制器,并且该[Authenticate]属性似乎忽略了[AllowAnonymous]我放置在Login帐户控制器操作上的属性。

我知道这两个是完全独立的,并且[AllowAnonymous]来自 System.Web,但是 ServiceStack 中是否有“允许”属性?

4

2 回答 2

2

我假设您将 ServcieStack 与 ASP.NET MVC 应用程序一起使用...

1)解决这个问题的正确方法是什么?

在继承自 ServiceStackController 的 MVC 控制器中,我添加了它来处理重定向。

public override ActionResult AuthenticationErrorResult
{
    get
    {
        if (this.AuthSession == null || this.AuthSession.IsAuthenticated == false)
        {
            return Redirect("~/Home/Login");
        }
        return base.AuthenticationErrorResult;
    }
}

Authenticate 属性的 HtmlRedirect 属性或 AuthFeature 属性的意义何在?
我很确定HtmlRedirect当不向 MVC 控制器发出请求时(即调用 /api/foo,假设 ServiceStack 的自定义路径是“/api”),它可以按预期工作。我认为 MVC '劫持回报'存在一些问题。

2) ServiceStackController 的目的是什么?
我的理解是它的主要目的是在 ServiceStack 和 MVC 之间共享 Session 数据

但是ServiceStack中有“允许”属性吗?
我不知道,但由于Authenticate 只是一个过滤器,您可能可以创建它的子类并添加某种类型的“允许”支持。

于 2013-05-06T19:02:11.593 回答
0

不确定它是否是新的,但查看了代码,它实际上只是 AuthFeature 构造函数的可选第三个参数,所以你可以:

//htmlRedirect is optional 3rd param of AuthFeature constructor, here passing "~/signin"
Plugins.Add(new AuthFeature(() => new AuthUserSession(),
    new IAuthProvider[] { new CredentialsAuthProvider(), },
    "~/signin"));
于 2015-03-24T09:19:11.833 回答