Как разрешить регистрацию в Devise после отправки приглашения?

Когда я отправляю приглашение новому пользователю через DeviseInvitable (например, на [email protected]), в таблице User создается новая запись с полем email == [email protected] .

Позже, когда я пытаюсь зарегистрироваться как новый пользователь и указываю адрес электронной почты [email protected], я получаю сообщение об ошибке: Email has already been taken.

====

Я работаю над многопользовательским веб-приложением, где регистрация означает создание нового контейнера, в котором будет работать группа пользователей. Администратор группы может приглашать новых участников присоединиться. НО пользователь может не захотеть принять приглашение в существующую группу и вместо этого решить создать свою собственную группу. Но в настоящее время он не может зарегистрироваться, потому что его адрес электронной почты уже находится в базе данных...

Есть ли способ для [email protected] по-прежнему зарегистрироваться? (Может быть, отклонить приглашение или удалить его запись из БД, подтвердив адрес электронной почты)?


person yaru    schedule 09.11.2015    source источник
comment
Что ж, вы можете переопределить контроллеры Devise по умолчанию и делать все, что хотите, на самом деле. Решите, что вы хотели бы сделать с точки зрения пользователя, а затем определите шаги, которые вам нужно будет предпринять в методах вашего контроллера, чтобы это произошло. Похоже, вы можете захотеть, чтобы ошибка «ранее зарегистрированная» (для неподтвержденных пользователей) перенаправляла вас на новую страницу, которая позволяла вам выбрать или создать одну из ваших групп, а затем отправить электронное письмо с подтверждением.   -  person A Fader Darkly    schedule 09.11.2015
comment
Крикните, если вам нужны какие-либо рекомендации по переопределению контроллеров Devise.   -  person A Fader Darkly    schedule 09.11.2015
comment
Возможен ли этот измененный рабочий процесс в Devise? После неудачной регистрации мне нужно перенаправить пользователя на мою пользовательскую страницу, сообщив ему, что кто-то использовал его адрес электронной почты для приглашения, и для того, чтобы зарегистрироваться, ему нужно сначала подтвердить свой адрес электронной почты. Когда он подтвердит это, я удалю его адрес электронной почты из базы данных (созданной ранее Invite), чтобы он мог зарегистрироваться.   -  person yaru    schedule 09.11.2015
comment
Fader Darkly, какой метод следует переопределить в RegistrationsController, чтобы поймать момент, когда электронная почта проверяется в БД (до того, как меня перенаправят на страницу с Email has already been taken msg)   -  person yaru    schedule 09.11.2015
comment
Контроллер определяется здесь: github.com/plataformatec/ разработка/блоб/мастер/приложение/контроллеры/   -  person A Fader Darkly    schedule 09.11.2015
comment
Я думаю, что метод create — это то, что вам нужно.   -  person A Fader Darkly    schedule 09.11.2015
comment
Мне нужно больше узнать о вашей предметной области, чтобы предложить дополнительные рекомендации по коду, однако исходный метод относительно прост, поэтому я не могу представить, что у вас возникнут слишком много проблем.   -  person A Fader Darkly    schedule 09.11.2015
comment
Спасибо, попробую, потом отпишусь, что получилось :)   -  person yaru    schedule 09.11.2015


Ответы (1)


Переопределите свой контроллер регистрации следующим образом:

class RegistrationsController < Devise::RegistrationsController

  def create
    user = User.find_by_email(params[:user][:email])
    if user && user.invitation_token
      user.destroy
    end
    super       
  end
end
person Dilnavaz    schedule 12.05.2016