2013-03-06 1 views
2

В настоящее время я устанавливаю модуль SecureSocial в своем приложении Play 2 с помощью UsernamePasswordProvider.SecureSocial 2/PlayFramework 2 - Добавление элементов в IdentityObject и изменение порядка рабочих потоков

знак вверх форма показывает следующую информацию, собранную в экземпляре Identity объекта:

Имя пользователя, Имя, Фамилия, Пароль, Подтверждение. Пароль.

Можно ли добавить некоторые данные в Identity объект, как, например, пол человека?

Возможно, SecureSocial предусмотрел подробные данные пользователя в отдельном объекте базы данных/таблицы.

Во-вторых, по умолчанию процесс «регистрации» начинает показывать форму с одним входом: «Электронная почта», направленная на отправку почты пользователю, чтобы перейти к подробным данным пользователя.

Могу ли я каким-либо образом настроить библиотеку, чтобы почта была отправлена ​​ПОСЛЕ того, как все пользовательские данные были заполнены? Значение, показывающее всю форму напрямую.

+0

Вы используете версию scala или java? – mericano1

+0

@ mericano1 Я использую версию Scala, я не упоминал язык, так как концепция также будет применяться с Java :) – Mik378

+0

@ mericano1 Я решил создать свой собственный securesocial-контроллер 'Registration', чтобы предоставить свой собственный экземпляр из Identity, содержащего многие данные пользователя, такие как телефон, дата рождения и т. д. Конечно, чтобы заставить его работать, я также переопределил соответствующие представления (и подклассифицировал DefaultTemplatePlugins, чтобы извлечь выгоду также из других методов реализации), чтобы взять мою собственную «регистрационную информацию», содержащую все поля. – Mik378

ответ

1

Вы должны распространяться на Identity. Тит, который является минимальным представлением социального пользователя (просто подумайте, что социальные сети могут не просить своих членов указать свой пол).

В моем проекте я хотел бы добавить информацию к моим пользователям, как последнее время входа в систему. Поэтому я только что создал класс User, который расширяет Identity, и я храню в БД данные User. Таким образом SecureSocial работает нормально.

Для вашего второго вопроса, я не думаю, что в настоящее время возможно настроить плагин, чтобы он работал, как вы сказали, но вы, конечно, можете запросить это для github.

+0

Вам пришлось изменить контроллер регистрации, чтобы указать свой собственный класс пользователя вместо экземпляра SocialUser, не так ли? Кстати, мне было очень уродливо добавить некоторые уродливые броски в мой подкласс UserService: 'def save (identity: Identity) {val user = identity.asInstanceOf [MyOwnUser] ....}' .. Поэтому для теперь я решил изменить ВСЕ файлы SecureSocial (так тесно связанные), чтобы использование моего собственного пользовательского класса стало более чистым и удовлетворяло моему второму требованию: данные пользователя, представленные в одной и только одной форме, следуя по почте, чтобы активировать новая учетная запись пользователя. Работает хорошо. – Mik378

+0

@ Mik378 Нет, я не должен был ничего менять в lib. Службы достаточно для выполнения всех операций без каких-либо бросков. В методе 'save', который вы указали, я начинаю с получения в БД' User' (где 'User' расширяет' Identity') с учетом предоставленного параметра 'Identity'. Затем я обновляю его, если он существует или создает его. И верните обновленный/созданный 'Пользователь'. Нет необходимости в трансляции, поскольку она расширяет идентификатор. – teemoo

+1

Да, я согласен, но он будет работать только для дополнительных данных, независимо от любого контекста, такого как: lastLoginTime (Date.now()).Как бы вы прошли, допустим, семейное положение пользователя, если параметр метода закрыт до 'Identity'? Вам понадобится другой параметр 'save (identity: Identity, maritalStatus: String)' или передать объект, расширяющий Identity, такой как MyOwnUser', расширяющий 'Identity' ... Таким образом, в этом случае я не вижу, как мы можем покинуть SecureSocial код нетронутым. – Mik378