UserAuthテーブルとUserAuthDetailsテーブルに追加のメタデータを追加するための戦略がいくつかあります。
独自のカスタムPOCOを使用してUserAuthのスキーマを拡張する場合は、カスタムPOCOを含むクラスをサブクラス化する必要があります。たとえば、 OrmLiteAuthRepositoryOrmLiteAuthRepository<T,T>
のソースを参照してください。
public class OrmLiteAuthRepository
: OrmLiteAuthRepository<UserAuth, UserAuthDetails>, IUserAuthRepository
{
public OrmLiteAuthRepository(IDbConnectionFactory dbFactory)
: base(dbFactory) { }
}
独自の型指定されたカスタムセッションでUserAuthSessionを拡張する
同時に、型付きのカスタムAuthUserSessionを拡張して提供することをお勧めします。これは、 ServiceStackの 認証機能でサポートされているためです。これは、ユーザーセッションがキャッシュプロバイダー(つまり、RDBMSではない)でブロブされるだけで、スキーマのない永続性の特性が簡単に得られるためです。拡張型をサポートします。
メタディクショナリフィールドにメタデータを追加する
マイナーな拡張機能の場合、カスタム保持メタデータをサポートするために特別に追加された各テーブルのメタ文字列ディクショナリフィールドを使用できます。また、複雑なタイプのブロビングもサポートする便利なメソッドGet<T>
も含まれています。Set<T>
userAuth.Set(new Address { ... });
var address = userAuth.Get<Address>();
参照データをRefIdおよびRefIdStrフィールドにリンクする
およびテーブルにはUserAuth
、各ユーザー認証レコードまたはユーザーOAuth登録に対して独自のカスタムテーブルなどの外部データを参照するために使用できるフィールドとフィールドもUserAuthDetails
含まれています。int? RefId
string RefIdStr
UserAuth情報を独自のカスタムテーブルに抽出する
もう1つのオプションは、SocialBootstrapApiサンプルデモが行っていることを実行し、ユーザーが正常に認証されるたびに呼び出される独自のカスタムUserSessionのOnAuthenticatedフックをオーバーライドすることにより、UserAuth情報を独自のカスタムテーブルに抽出することです。
これは、セッションデータをカスタムユーザーPOCOにコピーし、それを別のテーブルに保存するSocialBootstrapApiの例です。
public class CustomUserSession : AuthUserSession
{
public string CustomId { get; set; }
public override void OnAuthenticated(IServiceBase authService, IAuthSession session,
IAuthTokens tokens, Dictionary<string, string> authInfo)
{
base.OnAuthenticated(authService, session, tokens, authInfo);
//Populate all matching fields from this session to your own custom User table
var user = session.TranslateTo<User>();
user.Id = int.Parse(session.UserAuthId);
user.GravatarImageUrl64 = !session.Email.IsNullOrEmpty()
? CreateGravatarUrl(session.Email, 64)
: null;
//Resolve the DbFactory from the IOC and persist the user info
using (var db = authService.TryResolve<IDbConnectionFactory>().Open())
{
db.Save(user);
}
}
}