Придумать Подтверждаемый. Как удалить поле электронной почты?
Чтобы отправить новые инструкции по подтверждению, необходимо ввести электронное письмо. Я хочу избежать этого, потому что мои пользователи вошли в систему в этот момент, поэтому нет необходимости спрашивать по электронной почте. Я просто хочу отправить новые инструкции 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 }