私はServiceStackを理解して、新しいモバイル製品を構築しようとしています。ゆっくりとまとめられていますが、ドキュメントは優れていますが、コメントや質問をする機能がない部分が少し短いです。
この質問は、組み込みの認証に関するものです。
私はSocialBootstrapから作業してきましたが、これは素晴らしい例ですが、バックボーンの経験が不足していることは少し障害になります。同時に学びたいのですが、時間がないので、伝統的な見方を続けていきたいです。
これに基づいて、本当に役立つサンプルやドキュメントの拡張機能がいくつかあります。
AuthUserSession
1.文字列のすべてのプロパティがなぜですか?
クラスを介して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
。
このドキュメントページは素晴らしいですが、これの一部を含めるために少し拡張することができます。