Rails: реализация многоэтапных процессов регистрации (с OmniAuth)

Я пытаюсь реализовать многоэтапный процесс регистрации. В этой конкретной реализации используется OmniAuth, но для целей данного обсуждения это вполне может быть любой поставщик OAuth.

Вот шаги регистрации, которые мы могли бы реализовать:

Шаг 1. Пользователь нажимает Соединяется с _______ __.

Шаг 2. Авторизуйтесь через _________ и перенаправьте на обратный вызов . Получите соответствующие данные от поставщика и сохраните их в своей модели User.

Шаг 3. Выберите имя пользователя, укажите адрес электронной почты и любые другие данные, необходимые для регистрации вашего приложения. Также сохраните это в своей модели User.

Проблема для меня заключается в переходе от шага 2 к шагу 3. Я мог бы установить проверку данных на основе состояния, используя что-то вроде state_machine, например.

Однако мне пришлось бы удалить ненулевые ограничения на уровне столбцов для некоторых важных фрагментов данных, таких как username в моем случае (который используется для пользовательских маршрутов) или email. Мне не очень удобно удалять еще один уровень целостности данных.

Я уверен, что эта проблема уже решалась тысячу раз. Как вы справились с этим и как бы вы порекомендовали мне справиться с этим?


person Josh Smith    schedule 28.10.2012    source источник
comment
Ознакомьтесь с stackoverflow. ком/вопросы/2917604/   -  person Thilo    schedule 29.10.2012
comment
@Thilo Я видел этот скринкаст, и он не решает мою проблему с ненулевыми ограничениями, как и с state_machine, если только я что-то не упустил.   -  person Josh Smith    schedule 29.10.2012


Ответы (1)


Не могли бы вы добавить данные от поставщика в качестве скрытых полей в форму для шага 3, чтобы выбрать имя пользователя, адрес электронной почты и т. д.? Таким образом, вы не будете создавать экземпляр User, пока у вас не будут доступны все данные.

person Jason Noble    schedule 28.10.2012
comment
Чтобы уточнить, шаг 2 на самом деле не форма, это просто код, выполняемый в контроллере. Я мог бы просто отобразить данные в форме с запросом GET, а не сохранять их, но я не уверен, насколько это замечательная идея. - person Josh Smith; 29.10.2012