servicestack.razor中的身份验证

时间:2012-09-20 06:30:35

标签: c# authentication razor servicestack

我尝试使用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来处理页面中的授权。我试过了,但抛出方法不存在错误。

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

更新:我正在使用ServiceStack.Razor与SelfHosting

2 个答案:

答案 0 :(得分:3)

在ServiceStack Self Host场景中,我能够像这样访问Razor视图中的会话:

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

Authenticated: @user.IsAuthenticated

答案 1 :(得分:2)

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

具有授权属性的服务现在重定向到login page,而现在返回黑页。请更新最新的servicestack发布。

尝试了很多在剃刀页面上处理身份验证的可能性之后,可以通过访问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");
    }
}

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