1

私はServiceStackを理解して、新しいモバイル製品を構築しようとしています。ゆっくりとまとめられていますが、ドキュメントは優れていますが、コメントや質問をする機能がない部分が少し短いです。

この質問は、組み込みの認証に関するものです。

私はSocialBootstrapから作業してきましたが、これは素晴らしい例ですが、バックボーンの経験が不足していることは少し障害になります。同時に学びたいのですが、時間がないので、伝統的な見方を続けていきたいです。

これに基づいて、本当に役立つサンプルやドキュメントの拡張機能がいくつかあります。

AuthUserSession1.文字列のすべてのプロパティがなぜですか? クラスを介してCustomUserSession作成できることを確認しましたが、デフォルトのプロパティはデータベーステーブルCustomIdのプロパティにマップされるべきではありませんか?AutoIncrement整数に解析する必要があることは、実際には理想的ではありません。私はそれが一度だけ行われたと思いますが、それでも奇妙に見えました。

var user = session.TranslateTo<User>();
user.Id = int.Parse(session.UserAuthId);

2.セッションの取得ControllerBase私のコントローラーは どの実装 から派生しているServiceStackController<CustomUserSession>ので、コントローラーからセッションにアクセスするのは簡単base.UserSessionです。のセッションにアクセスする必要がある場合は、View単にセッションをViewBagプロパティに詰め込みます。

私のサービスは拡張AppServiceBaseされていますが、現時点でセッションにアクセスできる唯一の方法は、ClientCache:を挿入することです。

public ICacheClient CacheClient { get; set; }

そして、呼び出します:

var userSession = SessionFeature.GetOrCreateSession<AuthUserSession>(CacheClient);

これは最も洗練された解決策ではないように思われるので、私が知らないより良い方法があることを願っています。につながる..

3. IClientCacheこの質問を 読むと、より永続的なセッションキャッシュを実装する必要があるように思われます。_layout再コンパイル、保存、またはその他のアプリのリセットアクション を実行するたびに認証を行う必要があるのは非常に面倒です。

より永続的なキャッシングに推奨されるソリューションは、Memcachedを使用することでしょうか?残念ながら、過去にはFormsAuthenticationのみを使用していたため、これも新しい領域です。

container.Register<ICacheClient>(new MemcachedClientCache("127.0.0.0[:11211]");

4.手動登録 これは奇妙なものです。インターネットに接続せずにコーディングしようとしたので、コントローラーのすべての属性をコメントアウトする必要がないように手動登録を実装しました[Authenticate](ビューにはログインロジックもいくつかあります)。

動作したか、デバッグを続行できるので動作したことを思い出します。しかし、今では接続された世界に戻って、そうではありません。そして、APIエンドポイントは存在しないようです。を参照すると/api/register、を受け取りますNotImplementedException。繰り返しますが、私はバックボーンを使用していないので、作業を実行するためのjavascript関数があります。

var gateway = new servicestack.ClientGateway(location.protocol + "//" + location.host + '/api/');

function intiRegisterUser() {
    $('#signup-button').click(function () {
        gateway.postFormDataToService({
                Register: {
                    userName: $('#Username').val(),
                    displayName: $('#Username').val(),
                    firstName: $('#FirstName').val(),
                    lastName: $('#LastName').val(),
                    email: $('#Email').val(),
                    password: $('#Password').val()
                }
            },
            function(e) {
                document.location = "/";
            },
            function(ex) {
                handleError(ex);
            });
    });
}

これも。を返しますNotImplementedException

このドキュメントページは素晴らしいですが、これの一部を含めるために少し拡張することができます。

https://github.com/ServiceStack/ServiceStack/wiki/Sessions

4

1 に答える 1

3

1. AuthUserSession文字列のすべてのプロパティがなぜですか?

ServiceStackの組み込み認証は、複数のAuthリポジトリとセッションプロバイダーのバックエンドをサポートするように設計されています。複数のプロバイダーをサポートし、新しいプロバイダーの作成に必要な摩擦を減らすために、多くのメタデータプロパティは、任意のデータ型を保持できる文字列として残ります(32ビット整数しか保持できないintとは対照的です)。

2.セッションを取得する

ServiceStackの新しいAPIを使用する場合、次のコマンドで型指定されたUserAuthSessionにアクセスできる便利なService基本クラスから継承できます。

base.SessionAs<AuthUserSession>();

また、次の方法で動的セッションバッグへのアクセスを提供します。

base.Session["dynamicProperty"]

3. IClientCache

永続キャッシュが必要な場合は、ServiceStackの分散キャッシュプロバイダーのいずれかを使用してください。Memcachedに比べて多くの利点があり、Vagrantを使用してWindowsで簡単に実行できるRedisをお勧めします。

4.手動登録

この/api/registerサービスはHTTPPOSTのみを実装します。RegistrationServiceのカスタムルートは/registerですが、RegistrationService事前定義されたルート(この例では使用しています)は、 RegistrationRequestDTOによって推測されます。

/api/json/syncreply/Registration

またはv3.9.35リリース以降、短いエイリアス:

/api/json/reply/Registration

したがって、JavaScriptの例ではRegistrationプロパティを使用する必要があります。例:

 gateway.postFormDataToService({
    Registration: { .. }
 });
于 2013-02-06T19:34:01.900 に答える