adds email verification

This commit is contained in:
rgarcia
2015-08-27 23:57:04 +02:00
parent 3fc8d830f1
commit 570f67195c
5 changed files with 77 additions and 0 deletions

View 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

View File

@@ -14,4 +14,11 @@ class Mailer < ApplicationMailer
mail(to: @recipient.email, subject: t('mailer.reply.subject'))
end
def email_verification(user, recipient, token)
@user = user
@recipient = recipient
@token = token
mail(to: @recipient, subject: "Verifica tu email")
end
end

34
app/models/email.rb Normal file
View 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

View File

@@ -0,0 +1 @@
<p><%= link_to "Confirma tu email", email_url(email_verification_token: @token) %></p>

View 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 %>