7

我正在查看 Rockstars 示例和 ServiceStack.Razor。

我如何着手将身份验证安装到secure.cshtml 页面中。因此,如果需要,我可以将用户重定向到 Login.cshtml。

我只从 SocialBootstrapApi 示例中了解到,如果我混合 MVC hybird,我可以将 [authenticate()] 放在 ServiceStackController 中来实现这一点。

但是如果我只想要一个没有 .net MVC 的纯 SS 项目怎么办?

4

1 回答 1

7

Authenticate属性只是一个普通的 ServiceStack请求过滤器属性,即它在 MVC 和 ServiceStack 中都有效。

应用此过滤器将为所有非 HTML 请求返​​回401 UnAuthorized响应。例如,如果您使用 Ajax 调用它,您可以检测到此错误响应并在客户端上执行重定向。

从 ServiceStack v3.9.23+ 开始,默认情况下,该[Authenticate]属性将自动将所有身份验证错误重定向到~/loginurl。

您可以在注册 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");
}
于 2012-09-28T14:21:23.463 回答