adds email verification
This commit is contained in:
31
app/controllers/verification/email_controller.rb
Normal file
31
app/controllers/verification/email_controller.rb
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
class Verification::EmailController < ApplicationController
|
||||||
|
before_action :authenticate_user!
|
||||||
|
before_action :set_verified_user
|
||||||
|
skip_authorization_check
|
||||||
|
|
||||||
|
def show
|
||||||
|
if Email.find(current_user, params[:email_verification_token])
|
||||||
|
current_user.update(verified_at: Time.now)
|
||||||
|
redirect_to account_path, notice: t('verification.email.show.flash.success')
|
||||||
|
else
|
||||||
|
redirect_to verified_user_path, alert: t('verification.email.show.alert.failure')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
@email = Email.new(@verified_user)
|
||||||
|
if @email.save
|
||||||
|
current_user.reload
|
||||||
|
Mailer.email_verification(current_user, @email.recipient, @email.encrypted_token).deliver_now
|
||||||
|
redirect_to account_path, notice: t('verification.email.create.flash.success', email: @verified_user.email)
|
||||||
|
else
|
||||||
|
redirect_to verified_user_path, alert: t('verification.email.create.alert.failure')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def set_verified_user
|
||||||
|
@verified_user = VerifiedUser.by_user(current_user).by_email(params[:recipient]).first
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -14,4 +14,11 @@ class Mailer < ApplicationMailer
|
|||||||
mail(to: @recipient.email, subject: t('mailer.reply.subject'))
|
mail(to: @recipient.email, subject: t('mailer.reply.subject'))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def email_verification(user, recipient, token)
|
||||||
|
@user = user
|
||||||
|
@recipient = recipient
|
||||||
|
@token = token
|
||||||
|
mail(to: @recipient, subject: "Verifica tu email")
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
34
app/models/email.rb
Normal file
34
app/models/email.rb
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
class Email
|
||||||
|
include ActiveModel::Model
|
||||||
|
|
||||||
|
attr_accessor :verified_user, :recipient, :plain_token, :encrypted_token
|
||||||
|
|
||||||
|
validates :verified_user, presence: true
|
||||||
|
validates :recipient, presence: true
|
||||||
|
|
||||||
|
def initialize(verified_user)
|
||||||
|
@verified_user = verified_user
|
||||||
|
@recipient = @verified_user.try(:email)
|
||||||
|
end
|
||||||
|
|
||||||
|
def save
|
||||||
|
return false unless valid?
|
||||||
|
|
||||||
|
generate_token
|
||||||
|
user = User.where(document_number: verified_user.document_number).first
|
||||||
|
user.update(email_verification_token: @plain_token)
|
||||||
|
end
|
||||||
|
|
||||||
|
def generate_token
|
||||||
|
@plain_token, @encrypted_token = Devise.token_generator.generate(User, :email_verification_token)
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.find(user, token)
|
||||||
|
self.valid_token?(user, token)
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.valid_token?(user, token)
|
||||||
|
Devise.token_generator.digest(User, :email_verification_token, user.email_verification_token) == token
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
1
app/views/mailer/email_verification.html.erb
Normal file
1
app/views/mailer/email_verification.html.erb
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<p><%= link_to "Confirma tu email", email_url(email_verification_token: @token) %></p>
|
||||||
4
app/views/verification/email/_form.html.erb
Normal file
4
app/views/verification/email/_form.html.erb
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<%= form_for Email.new(verified_user), url: email_path, method: :post do |f| %>
|
||||||
|
<%= hidden_field_tag :recipient, verified_user.email %>
|
||||||
|
<%= f.submit t('verification.email.form.submit_button') %>
|
||||||
|
<% end %>
|
||||||
Reference in New Issue
Block a user