Придумать Подтверждаемый. Как удалить поле электронной почты?

Чтобы отправить новые инструкции по подтверждению, необходимо ввести электронное письмо. Я хочу избежать этого, потому что мои пользователи вошли в систему в этот момент, поэтому нет необходимости спрашивать по электронной почте. Я просто хочу отправить новые инструкции current_user.email

Я не хочу делать такие вещи на стороне клиента:

= f.email_field :email, value: current_user.email, class: "hidden"

Мне нужно решение на стороне сервера.

Спасибо, парни!

3 ответа

Решение

Я закончил с этим:

Сначала переопределите контроллер devise:

конфиг /routes.rb

devise_for :users, controllers: { confirmations: "users/confirmations" }

Контроллеры / пользователи /confirmations_controller.rb

class Users::ConfirmationsController < Devise::ConfirmationsController
  def create
    redirect_to new_user_session_path unless user_signed_in?
    if current_user.confirmed?
      redirect_to root_path
    else
      current_user.send_confirmation_instructions
      redirect_to after_resending_confirmation_instructions_path_for(:user)
    end
  end
end

  protected

    # The path used after resending confirmation instructions.
    def after_resending_confirmation_instructions_path_for(resource_name)
      flash[:notice] = "Instructions sent successfully."            
      is_navigational_format? ? root_path (or whatever route) : '/'
    end    
end

Затем удалите поле электронной почты из представления.

просмотров / изобрести / подтверждения / new.html.haml

= form_for(resource, as: resource_name, url: confirmation_path(resource_name), method: :post }) do |f|
  = f.submit "Resend confirmation instructions"

Спасибо всем за ваши ответы.

Согласно исходной кодовой базе, отправка электронного письма с подтверждением может быть вызвана пользователем следующим образом:

user = User.find(1)
user.send_confirmation_instructions

Таким образом, вам не нужно получать электронную почту из формы.

У вас есть доступ к методу устройства, это должно работать.

Смотрите документацию здесь

routes.rb

devise_for :users, controllers: { confirmations: "confirmations" }

Ввиду

= link_to "resend confirmation", user_confirmation_path, data: { method: :post }
Другие вопросы по тегам