Ответ 1
Существует несколько стратегий добавления дополнительных метаданных в таблицы UserAuth и UserAuthDetails,
Если вы хотите расширить схему UserAuth с помощью собственного пользовательского POCO, вам потребуется подкласс класса OrmLiteAuthRepository<T,T>
, включая ваш пользовательский POCO, например, см. Источник OrmLiteAuthRepository:
public class OrmLiteAuthRepository
: OrmLiteAuthRepository<UserAuth, UserAuthDetails>, IUserAuthRepository
{
public OrmLiteAuthRepository(IDbConnectionFactory dbFactory)
: base(dbFactory) { }
}
Расширить UserAuthSession с помощью собственного пользовательского сеанса
В то же время расширение и предоставление типизированного, AuthUserSession - это рекомендуемый подход, поскольку он поддерживается ServiceStack Функция проверки подлинности, поскольку сеанс пользователей просто заглатывается в поставщик кэширования (т.е. не в СУБД), где его характеристики отсутствия схемы без схемы, легко поддерживает расширенные типы.
Добавление дополнительных метаданных в поля метаданных
Для второстепенных расширений вы можете использовать поля Мета строковых словарей в каждой таблице, которые были добавлены специально для поддержки метаданных, поддерживаемых пользователем. Они также включают полезные методы Get<T>
и Set<T>
, которые также поддерживают сложные типы разбиения:
userAuth.Set(new Address { ... });
var address = userAuth.Get<Address>();
Связывание референтных данных с полями RefId и RefIdStr
Таблицы UserAuth
и UserAuthDetails
также включают поля int? RefId
и string RefIdStr
, которые вы можете использовать для ссылки на внешние данные, такие как ваши собственные пользовательские таблицы, на каждую запись User Auth или регистрацию пользователя OAuth.
Извлечение информации UserAuth в ваши собственные таблицы
Другой вариант - сделать то, что делает демонстрационный пример SocialBootstrapApi, и извлекать информацию UserAuth в свои собственные таблицы, переопределяя OnAuthenticated в вашей собственной пользовательской службе, которая вызывается каждый раз, когда пользователь успешно аутентифицируется.
Здесь Пример SocialBootstrapApi для копирования данных сеанса в пользовательский POCO пользователя и сохранения его в другой таблице.
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);
}
}
}