1

我尝试使用ServiceStack.Razor. 但是遇到了如何处理服务和页面中的身份验证的问题。

处理服务中的未经授权的访问非常容易,因为我们可以设置身份验证属性。我使用 credentialsAuthProvider 进行了配置身份验证,并使用查询字符串对成功进行了身份验证,/auth?username=&password并成功访问了受保护的服务。

但是如何处理对服务的未经授权的访问。目前它返回 401 未经授权的访问。因此,当用户访问该页面时,它只显示空白页面.. 我尝试设置 customhttphandler 以进行未经授权的访问以重定向到登录页面但不成功

SetConfig(new EndpointHostConfig {
    DebugMode = true,
    CustomHttpHandlers = {
      { HttpStatusCode.NotFound, new RazorHandler("/notfound") },
      { HttpStatusCode.Unauthorized, new RazorHandler("/login") },
    }
});

Servicestack.razor允许创建像 Asp.Net WebPages 这样的 Razor 页面,但没有示例如何处理页面中的授权,如使用Request.IsAuthenticated. 我试过了,但是 throw 方法不存在错误。

以及如何注销或销毁身份验证会话

更新:我正在使用ServiceStack.RazorSelfHosting

4

2 回答 2

3

在 ServiceStack Self Host 场景中,我能够访问 Razor 视图中的会话,如下所示:

@{
    var user = Request.GetSession();
}

Authenticated: @user.IsAuthenticated
于 2013-01-03T01:13:07.613 回答
2

必须回答我自己..因为没有人来回答,这将是其他人的参考..

具有 Authorize 属性的服务现在重定向到登录页面,而不是现在返回黑页。请更新最新的 servicestack 版本。

在尝试了许多可能在razor页面上处理身份验证后,可以通过访问razor页面中的缓存来实现。

@{
    var user = Cache.Get<AuthUserSession>(SessionKey);
}

@if (user != null && user.IsAuthenticated) {
    <h1>User @user.DisplayName is Logged</h1>
}

但有限制,这只能在 Asp.Net WebHost 中工作。我仍然在寻找让它在 Self Host 中工作的方法。

注销过程可以通过创建注销服务来实现,其中删除会话并重定向到登录页面。

    [Route("logout")]
public class Logout { }

public class UserService : Service
{
    public object Any (Logout r)
    {
        this.RemoveSession();
        return this.Redirect("/login");
    }
}

我会尝试用它制作示例项目并尽快发布

于 2012-10-24T02:15:24.283 回答