The 认证属性只是一个普通的 ServiceStack请求过滤器属性,即它适用于 MVC 和 ServiceStack。
应用此过滤器将返回401 未经授权对所有非 HTML 请求的响应。例如如果您使用 Ajax 调用此方法,您可以检测到此错误响应并在客户端上执行重定向。
从 ServiceStack v3.9.23+ 开始[Authenticate]
属性将自动将所有身份验证错误重定向到~/login
默认网址。
您可以在注册 AuthFeature 时覆盖此 url,例如:
Plugins.Add(new AuthFeature(...) { HtmlRedirect = "/path/to/my/login" });
这将适用于全球范围内的所有人[Authenticate]
属性,或者您可以使用以下命令临时覆盖它:
[Authenticate(HtmlRedirect="/path/to/my/login")]
注意:属性是可继承的,因此您可以将其添加到安全服务类和所有子类将继承其行为。
手动重定向
要手动重定向未经授权的 HTML 请求,您可以使用以下命令进行自己的检查+重定向:
public object Secured(Request request) {
if (!base.SessionAs<MyCustomSession>().IsAuthenticated)
return new HttpResult(HttpStatusCode.Redirect, "Un Authorized") {
Headers = { {"Location", "/path/to/login" } } };
}
上述重定向还有一个 DRY 包装器,您可以使用它来代替:
public object Secured(Request request) {
if (!base.SessionAs<MyCustomSession>().IsAuthenticated)
return HttpResult.Redirect("/path/to/login");
}