Пользовательская проверка электронной почты — не может установить emailVerified

Я пытаюсь реализовать пользовательская проверка электронной почты для регистрации пользователя. По умолчанию отправляются только текстовые сообщения, но мы хотим отправлять сообщения в формате HTML.

Текущий подход:

  1. Используя Cloud Code, функцию Parse.Cloud.beforeSave("Parse.User"… устанавливает сгенерированный токен в » пользователя ‘confirmationTokenполе
  2. Эта же функция отправляет отформатированное письмо, используя MailChimp«s Облачный модуль Mandrill услуги для пользователя, включая ссылку для подтверждения с confirmationToken как это http://www.our-website.com/confirm_email.php?confirmationToken=confirmationToken
  3. Пользователь нажимает на ссылку, наш сайт получает токен через HTTP-запрос GET
  4. Сайт работает Разбор PHP SDK и запрашивает базу данных пользователей, чтобы получить пользователя с confirmationToken значение поля, соответствующее токену из запроса
  5. Если пользователь найден, мы пытаемся установить emailVerified поле для true

Теперь вот проблема. emailVerified поле кажется защищенным. Попытка установить это даст вам ParseException ‘InvalidKeyName’ (105). Теперь я мог бы просто использовать другое поле, но проблема в том, что мы предварительно настроили проверку электронной почты Parse по умолчанию, и наши приложения ищут это значение в emailVerified, Пользователи уже зарегистрировались с подтверждением электронной почты по умолчанию, и мы не можем просто изменить его, потому что приложения развернуты.

Есть ли способ установить emailVerified поле?
Может кто-нибудь придумать решение, которое также будет работать для приложений, которые уже проверяют это поле, хотя в будущем нам придется установить другое?
Будет ли поле по-прежнему защищено, если вы отключите проверку электронной почты (сейчас оно все еще включено)?

Любая помощь с благодарностью.

1

Решение

К сожалению, emailVerified атрибут не может быть установлен, даже используя главный ключ. Единственной альтернативой является создание настраиваемого проверенного атрибута, который согласуется с настраиваемой логикой проверки.

Я бы выбрал такой подход:

  1. построить и протестировать новую схему, используя новое поле
  2. запустить миграцию, которая заполняет новый атрибут пользователями emailVerified
  3. вызвать ту же логику в afterSave для любого Parse.User
  4. пересмотреть клиента, чтобы проверить новый атрибут

Я понимаю, что шаг 4. нарушает предпосылку вопроса, но ваше приложение должно быть разработано исходя из того, что клиент может и будет пересмотрен. Если это не эта проблема, это будет другой. Условия работы будут меняться, как и ваш клиент.

1

Другие решения

Я просто хотел бы добавить, что мы развернули приложение в Parse 60 дней назад, в среднем 2000 новых пользователей в неделю с обязательной проверкой электронной почты. Наши пользователи в основном государственные (много .gov’s). Мы проводим часы каждый день, обрабатывая заявки на поддержку в Zendesk вокруг пользователей, не получающих ссылку для проверки. Поддержка сокрушает нас.

Я понимаю намерение заблокировать поле, но если я получу электронное письмо от пользователя, этого достаточно для проверки, и это сэкономит нам столько времени, чтобы переключить emailVerified на true.

Пожалуйста, еще раз дайте возможность разработчикам принять это решение самостоятельно.

2