根据此question,有一种方法可以更改ServiceStack身份验证服务的重定向URL。
然而,当从ServiceStackController<AuthUserService>
继承我的控制器时,这显然不起作用,因为ServiceStackController对重定向URL进行了硬编码,并且在AuthFeature
注册中更改它对它没有影响。
我的问题是:
1)解决这个问题的正确方法是什么?
有一个选项可以覆盖LoginRedirectUrl
,这是吗? Authenticate属性的HtmlRedirect
属性或AuthFeature的属性有什么意义?
2)ServiceStackController
完全是什么目的?
3)我已将[Authenticate]
放在我的基本控制器上,[Authenticate]
属性似乎忽略了我在帐户控制器的[AllowAnonymous]
操作上放置的Login
属性
我知道这两个是完全分开的,[AllowAnonymous]
来自System.Web,但ServiceStack中是否有“allow”属性?
答案 0 :(得分:2)
我假设您正在使用ServcieStack和ASP.NET MVC应用程序......
1)解决此问题的正确方法是什么?
在我继承自ServiceStackController的MVC Controller中,我添加了它来处理重定向。
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的custompath为'/ api')。我认为MVC'劫持回报'存在一些问题。
2)ServiceStackController的目的是什么?
我的理解是它的主要目的是在ServiceStack和MVC之间share Session data
但ServiceStack中是否有“allow”属性?
不是我知道但是因为Authenticate is just a filter你可以创建它的子类并为'allow'添加某种类型的支持。
答案 1 :(得分:0)
不确定它是否是新的,但是看了一下代码,它实际上只是AuthFeature构造函数的可选第三个参数,所以你可以这样做:
//htmlRedirect is optional 3rd param of AuthFeature constructor, here passing "~/signin"
Plugins.Add(new AuthFeature(() => new AuthUserSession(),
new IAuthProvider[] { new CredentialsAuthProvider(), },
"~/signin"));