1

を使用して完全なWebアプリを作成しようとしています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.razorAsp.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リリースを更新してください。

かみそりページで認証を処理する多くの可能性を試した後、かみそりページのキャッシュにアクセスすることでそれを実現できます。

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

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

ただし、これはAsp.NetWebHostでのみ機能するという制限があります。私はまだセルフホストでそれを機能させる方法を見つけています。

ログアウトプロセスは、セッションを削除してログインページにリダイレクトするログアウトサービスを作成することで実現できます。

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