Подтверждение разработки, как повторно отправить электронное письмо с подтверждением при нажатии?

Я использую подтверждаемое устройство. Я хочу дать пользователю ссылку, чтобы щелкнуть и повторно отправить электронное письмо с подтверждением. Проблема в том, что когда пользователь щелкает ссылку, она не переходит к контроллеру устройства. Есть ли что-то, чего мне не хватает в файле route.rb? Вот мои настройки:

route.rb

devise_for :users, :controllers => { :registrations => "registrations", :sessions => "sessions", :omniauth_callbacks => "authentications" }

user.rb

devise :omniauthable, :database_authenticatable, :registerable, :confirmable, :recoverable, :rememberable, :trackable, :validatable

Представление:

<a href="/users/confirmation/new" data-remote="true" data-method="post">Resend confirmation</a>

Спасибо

27
задан AnApprentice 9 March 2012 в 01:06
поделиться

4 ответа

Довольно старый пост. Хотя вместо прямой отправки инструкций вы можете просто указать пользователю на рабочий процесс Devise:

= link_to 'Resend confirmation', new_user_confirmation_path

Это приведет пользователя к представлению Devise с просьбой отправить электронное письмо с инструкциями для подтверждения.

Надеюсь, это кому-нибудь поможет. :)

5
ответ дан 28 November 2019 в 04:53
поделиться

Вот мое решение. Надеюсь, что-то не пропало в моем переключателе в resource_params. Примечание: непроверенный

контроллер подтверждения

class ConfirmationsController < Devise::ConfirmationsController

  # POST /resource/confirmation
  def create
    # self.resource = resource_class.send_confirmation_instructions(resource_params)
    self.resource = resource_class.send_confirmation_instructions({email: current_user.email})
    if successfully_sent?(resource)
      respond_with({}, :location => after_resending_confirmation_instructions_path_for(resource_name))
    else
      respond_with(resource)
    end
  end

protected

  # The path used after resending confirmation instructions.
  def after_resending_confirmation_instructions_path_for(resource_name)
    root_path
  end
end

маршруты

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

вид

<%= link_to "resend confirmation", user_confirmation_path, data: { method: :post } %>
3
ответ дан 28 November 2019 в 04:53
поделиться

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

app / controllers / translations_controller.rb. ] app / views / devise / translations / new.html.erb

<h2>Resend confirmation instructions</h2>
<%= form_for(resource, :as => resource_name, :url => confirmation_path(resource_name), :html => { :method => :post }) do |f| %>
  <%= devise_error_messages! %>

  <div><%= f.label :email %><br />
  <%= f.email_field :email, :autofocus => true %></div>

  <div><%= f.submit "Resend confirmation instructions" %></div>
<% end %>

<%= render "devise/shared/links" %>
2
ответ дан 28 November 2019 в 04:53
поделиться

Я делюсь своим решением, так как оно немного другое, но, на мой взгляд, ближе к обычному потоку пользователей (перенаправьте на страницу с благодарностью, где у вас есть кнопка для повторной отправки без повторной отправки письма), и вы не будете придется переопределить контроллер подтверждений.

После регистрации пользователь перенаправляется на страницу «Спасибо». В registrations_controller:

  def after_inactive_sign_up_path_for(resource)
   session[:user_id] = resource.id
   redirect_to thanks_url
  end

в пользовательском контроллере вы просто используете .send_confirmation_instructions для пользовательских

def thanks
    @user = User.find_by(id: session[:user_id])
end

def resend_confirmation
    user = User.find_by(id: params[:user_id])
    user.send_confirmation_instructions 
end

маршрутов:

get '/thanks', to: 'users#thanks'
post '/resend_confirmation', to: 'users#resend_confirmation', as: 'resend_confirmation'

наконец, в «спасибо» 'view:

<%= button_to "Resend confirmation", resend_confirmation_path(:user_id => @user.id) %>

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

2
ответ дан 28 November 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: