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");
}