Я использую Play Framework (v2.2.x), SecureSocial (v2.1.3) и scala (v2.10) для создания шаблона входа в игровые приложения. Я хочу, чтобы шаблон входа поддерживал как вход в социальные сети (Twitter, Facebook, Github и т. д.), так и вход в систему с помощью имени пользователя и пароля. Мне трудно представлять оба типа пользователей (социальных и локальных) для настойчивости.
Я использую MySQL (v 5.6.x) в качестве моей базы данных и squeryl (v0.9.6) в качестве ORM для сохранения.
Мне нужна помощь в моделировании как SocialUser, так и LocalUser (аутентификация пользователей с использованием имени пользователя и пароля) для сохранения.
Я просмотрел https://github.com/jaliss/securesocial/tree/master/samples/scala/demo. У меня запущена эта демонстрация (с дополнительной настройкой для mysql и squeryl. Кроме того, этот пример расширен для работы с Facebook и Github).
Я еще не написал никакого кода, но планировал моделировать следующим образом:
Класс пользователя:
+-------------------+---------------+------------+---------------+-------------+-------------+-----------+
| provider_user_id | providerType | email | avatarUrl | passwordInfo| oauth1Info | oauth2Info|
+-------------------+---------------+------------+---------------+-------------+-------------+-----------+
Аутпровидерфорусер:
+-------------------+----------------------+--------------+
| provider_user_id | application_user_id | providerType |
+-------------------+----------------------+--------------+
Класс токена:
+------+--------+---------------+-----------------+-----------+------------+
| uuid | email | creationTime | expirationTime | isSignUp | isExpired |
+------+--------+---------------+-----------------+-----------+------------+
В UserService я должен просто получить информацию из этих моделей, подготовить экземпляр удостоверения и вернуть/использовать его?
OR
Мне лучше иметь один класс User (класс SocialUser) с чертой Identity и сохранять его?
Вы можете думать об этом как о расширении для https://stackoverflow.com/a/16389116/2343569. В принципе, с точки зрения дизайна, лучше ли сохранить PlatformUser или разбить PlatformUser на классы (например, User и AuthProviderForUser), а затем сохранить их?
Какой вариант лучше? Любое другое предложение?