7

Rockstarsの例とServiceStack.Razorを見ています。

たとえば、secure.cshtmlページに認証を適合させるにはどうすればよいですか。したがって、必要に応じてユーザーをLogin.cshtmlにリダイレクトできます。

SocialBootstrapApiの例から、MVC hybirdを混合した場合にのみ理解できます。これを実現するには、ServiceStackControllerに[authenticate()]を配置できます。

しかし、.net MVCのない純粋なSSプロジェクトが必要な場合はどうなりますか?

4

1 に答える 1

7

Authenticate属性は、単なるServiceStackリクエストフィルター属性です。つまり、MVCとServiceStackの両方で機能します。

このフィルターを適用すると、 HTML以外のすべてのリクエストに対して401UnAuthorized応答が返されます。たとえば、これをAjaxで呼び出した場合、このエラー応答を検出し、クライアントでリダイレクトを実行できます。

ServiceStackのv3.9.23+以降、属性はデフォルトですべての認証エラーをURL[Authenticate]に自動的にリダイレクトします。~/login

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 に答える