我正在查看 Rockstars 示例和 ServiceStack.Razor。
我如何着手将身份验证安装到secure.cshtml 页面中。因此,如果需要,我可以将用户重定向到 Login.cshtml。
我只从 SocialBootstrapApi 示例中了解到,如果我混合 MVC hybird,我可以将 [authenticate()] 放在 ServiceStackController 中来实现这一点。
但是如果我只想要一个没有 .net MVC 的纯 SS 项目怎么办?
我正在查看 Rockstars 示例和 ServiceStack.Razor。
我如何着手将身份验证安装到secure.cshtml 页面中。因此,如果需要,我可以将用户重定向到 Login.cshtml。
我只从 SocialBootstrapApi 示例中了解到,如果我混合 MVC hybird,我可以将 [authenticate()] 放在 ServiceStackController 中来实现这一点。
但是如果我只想要一个没有 .net MVC 的纯 SS 项目怎么办?
Authenticate属性只是一个普通的 ServiceStack请求过滤器属性,即它在 MVC 和 ServiceStack 中都有效。
应用此过滤器将为所有非 HTML 请求返回401 UnAuthorized响应。例如,如果您使用 Ajax 调用它,您可以检测到此错误响应并在客户端上执行重定向。
从 ServiceStack v3.9.23+ 开始,默认情况下,该[Authenticate]
属性将自动将所有身份验证错误重定向到~/login
url。
您可以在注册 AuthFeature 时覆盖此 url,例如:
Plugins.Add(new AuthFeature(...) { HtmlRedirect = "/path/to/my/login" });
这将全局应用于所有[Authenticate]
属性,或者您可以临时覆盖它:
[Authenticate(HtmlRedirect="/path/to/my/login")]
注意:属性是可继承的,因此您可以将其添加到SecuredService类中,所有子类都将继承其行为。
要手动重定向未经授权的 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");
}