Comprobar el código de verificación
La última parte del proceso consiste en que el usuario introduzca el código que ha recibido y confirme que coincide con el enviado por la API de Verify.
En primer lugar, añade una nueva ruta:
config/routes.rb
Rails.application.routes.draw do
devise_for :users
resources :verifications, only: [:edit, :update]
root to: 'kittens#index'
end
A continuación, cree un controlador básico:
app/controllers/verifications_controller.rb
class VerificationsController < ApplicationController
skip_before_action :verify_user!
def edit
end
def update
end
end
Obsérvese en lo anterior que es importante omitir el before_action hemos añadido a la ApplicationController antes para que el navegador no acabe en un bucle infinito de redirecciones.
Crea una vista que permita al usuario introducir su código de verificación:
app/views/verifications/edit.html.erb
<div class="panel panel-default devise-bs">
<div class="panel-heading">
<h4>Verify code</h4>
</div>
<div class="panel-body">
<%= form_tag verification_path(id: params[:id]), method: :put do %>
<div class="form-group">
<%= label_tag :code %><br />
<%= number_field_tag :code, class: "form-control" %>
</div>
<%= submit_tag 'Verify', class: "btn btn-primary" %>
<% end %>
</div>
</div>
<%= link_to 'Send me a new code', :root %>
A continuación, el usuario envía su código al nuevo update acción. Dentro de esta acción, debes realizar la request_id y code y pasarlos a la check_verification_request método:
app/controllers/verifications_controller.rb
def update
confirmation = Vonage::Client.new.verify.check(
request_id: params[:id],
code: params[:code]
)
if confirmation['status'] == '0'
session[:verified] = true
redirect_to :root, flash: { success: 'Welcome back.' }
else
redirect_to edit_verification_path(id: params[:id]), flash[:error] = confirmation['error_text']
end
end
Cuando la comprobación de verificación se realiza con éxito, el estado del usuario pasa a ser «verificado» y se le redirige a la página principal. Si la comprobación falla, aparece un mensaje en el que se explica qué ha fallado.
Autenticación de dos factores para garantizar la seguridad y prevenir el spam
Aprenda a implementar 2fa en sus aplicaciones Ruby