Queremos verificar se o usuário insere seu e-mail real, adicionando uma instância de validação através de um link que enviaremos para o e-mail que foi inserido.
As alterações que descrevemos neste artigo são baseadas no tema Base. Mas também podem ser aplicados a qualquer tema, com algumas variações.
HTML
1. Quando um usuário criar uma conta, vamos dizer a ele que precisa validar sua conta por email. Para isso, vamos adicionar o seguinte código no arquivo register.tpl dentro da pasta template/account
{% embed "snipplets/page-header.tpl" %} {% block page_header_text %}{{ 'Crear cuenta' | translate }}{% endblock page_header_text %} {% endembed %} <p class="text-center mb-4 px-5">{{ 'Comprá más rápido y llevá el control de tus pedidos, ¡en un solo lugar!'| translate }}</p> {# Account validation #} {% if account_validation == 'pending' %} <div class="container"> <div class="row justify-content-md-center"> <div class="col-md-6 offset3"> <div class="js-account-validation-pending alert alert-primary mb-3"> <h4 class="weight-strong mb-1 p-2">{{ "¡Estás a un paso de crear tu cuenta!" | translate }}</h4> <p class="font-small mb-1">{{ "Te enviamos un link a <strong>{1}</strong> para que valides tu email." | t(customer_email) }} </p> </div> <div class="font-small text-center mb-4"> <p>{{ "¿Todavía no lo recibiste?" | translate }} <span class="js-resend-validation-link btn-link">{{ "Enviar link de nuevo" | translate }}</span></p> </div> <div class="js-resend-validation-success alert alert-success" style="display:none"> <p class="mb-0">{{ "¡El link fue enviado correctamente!" | translate }}</p> </div> <div class="js-resend-validation-error alert alert-danger" style="display:none"> <p class="m-1">{{ "No pudimos enviar el email, intentalo de nuevo en unos minutos." | translate }}</p> </div> </div> </div> </div> {% else %} {# Register Form #} <section class="account-page"> <div class="container"> <div class="row justify-content-md-center"> <div class="col-md-8"> {% embed "snipplets/forms/form.tpl" with{form_id: 'login-form', submit_custom_class: 'js-recaptcha-button btn-block', submit_prop: 'disabled', submit_text: 'Crear cuenta' | translate, data_store: 'account-register' } %} {% block form_body %} {# Facebook login #} {% include 'snipplets/facebook-login.tpl' %} {# Name input #} {% embed "snipplets/forms/form-input.tpl" with{type_text: true, input_for: 'name', input_value: result.name, input_name: 'name', input_id: 'name', input_label_text: 'Nombre' | translate, input_placeholder: 'ej.: María Perez' | translate} %} {% block input_form_alert %} {% if result.errors.name %} <div class="alert alert-danger">{{ 'Usamos tu nombre para identificar tus pedidos.' | translate }}</div> {% endif %} {% endblock input_form_alert %} {% endembed %} {# Email input #} {% embed "snipplets/forms/form-input.tpl" with{type_email: true, input_for: 'email', input_value: result.email, input_name: 'email', input_id: 'email', input_label_text: 'Email' | translate, input_placeholder: 'ej.: tunombre@email.com' | translate} %} {% block input_form_alert %} {% if result.errors.email == 'exists' %} <div class="alert alert-danger">{{ 'Encontramos otra cuenta que ya usa este email. Intentá usando otro o iniciá sesión.' | translate }}</div> {% elseif result.errors.email %} <div class="alert alert-danger">{{ 'Necesitamos un email válido para crear tu cuenta.' | translate }}</div> {% endif %} {% endblock input_form_alert %} {% endembed %} {# Phone input #} {% embed "snipplets/forms/form-input.tpl" with{type_tel: true, input_for: 'phone', input_value: result.phone, input_name: 'phone', input_id: 'phone', input_label_text: 'Teléfono (opcional)' | translate, input_placeholder: 'ej.: 1123445567' | translate} %} {% endembed %} {# Password input #} {% embed "snipplets/forms/form-input.tpl" with{type_password: true, input_for: 'password', input_name: 'password', input_id: 'password', input_label_text: 'Contraseña' | translate} %} {% block input_form_alert %} {% if result.errors.password == 'required' %} <div class="alert alert-danger">{{ 'Necesitamos una contraseña para registrarte.' | translate }}</div> {% endif %} {% endblock input_form_alert %} {% endembed %} {# Password confirm input #} {% embed "snipplets/forms/form-input.tpl" with{type_password: true, input_for: 'password_confirmation', input_name: 'password_confirmation', input_id: 'password_confirmation', input_label_text: 'Confirmar Contraseña' | translate} %} {% block input_form_alert %} {% if result.errors.password == 'confirmation' %} <div class="alert alert-danger">{{ 'Las contraseñas no coinciden.' | translate }}</div> {% endif %} {% endblock input_form_alert %} {% endembed %} {# Google reCAPTCHA #} <div class="g-recaptcha mb-4" data-sitekey="{{recaptchaSiteKey}}" data-callback="recaptchaCallback"></div> {% endblock %} {% endembed %} </div> </div> <p class="mt-3 text-center">{{ '¿Ya tenés una cuenta?' | translate }} <strong>{{ "Iniciá sesión" | translate | a_tag(store.customer_login_url, '', 'btn-link-primary') }}</strong></p> </div> </section> {% endif %}
2. Mensagens de verificação na tela de login.
Agora, vamos adicionar as diferentes mensagens para cada caso. Primeiro, vamos adicionar a mensagem que avisa o usuário de que sua conta foi criada com sucesso. Também neste código, incluiremos uma mensagem que o notificará quando o link de validação expirar e a opção de enviá-lo novamente e, por último, o caso em que um usuário deseja fazer o login sem ter previamente validado sua conta, pedindo-lhe que o faça.
No arquivo login.tpl que está dentro da pasta templates/account, vamos adicionar o seguinte código:
{% embed "snipplets/page-header.tpl" %}
{% block page_header_text %}{{ 'Iniciar sesión' | translate }}{% endblock page_header_text %}
{% endembed %}
{# Login Form #}
<section class="account-page">
<div class="container">
<div class="row justify-content-md-center">
{# Account validation #}
<div class="col-md-6 offset3">
{% if account_validation == 'success' %}
<div class="js-account-validation-success alert alert-success">
<p class="mb-0">{{ "¡Tu cuenta fue creada con éxito!" | translate }}</p>
</div>
{% elseif account_validation == 'expired' %}
<div class="js-account-validation-expired alert alert-danger mb-3">
<p class="mb-0">{{ "Tu link de validación expiró." | translate }}</p>
</div>
<div class="text-center mb-4">
<span class="js-resend-validation-link btn-link">{{ "Enviar link de nuevo >" | translate }}</span>
</div>
{% elseif account_validation == 'pending' %}
<div class="js-account-validation-pending alert alert-danger mb-2">
<p class="my-2">{{ "Validá tu email usando el link que te enviamos a <strong>{1}</strong> cuando creaste tu cuenta." | t(customer_email) }}</p>
</div>
<div class="text-center mb-4 font-small">
<p>{{ "¿No lo encontraste?" | translate }} <span class="js-resend-validation-link btn-link">{{ "Enviar link de nuevo" | translate }}</span></p>
</div>
{% endif %}
<div class="js-resend-validation-success alert alert-success" style="display:none">
<p class="m-1">{{ "¡El link fue enviado correctamente!" | translate }}</p>
</div>
<div class="js-resend-validation-error alert alert-danger" style="display:none">
<p class="m-1">{{ "No pudimos enviar el email, intentalo de nuevo en unos minutos." | translate }}</p>
</div>
</div>
</div>
<div class="row justify-content-md-center">
<div class="col-md-8">
{% embed "snipplets/forms/form.tpl" with{form_id: 'login-form',submit_custom_class: 'btn-block',submit_text: 'Iniciar sesión' | translate, data_store: 'account-login' } %}
{% block form_body %}
{# Facebook login #}
{% include 'snipplets/facebook-login.tpl' %}
{# Name input #}
{% embed "snipplets/forms/form-input.tpl" with{input_for: 'email', type_email: true, input_value: result.email, input_name: 'email', input_custom_class: 'js-account-input', input_label_text: 'Email' | translate } %}
{% endembed %}
{# Password input #}
{% embed "snipplets/forms/form-input.tpl" with{input_for: 'password', type_password: true, input_name: 'password', input_custom_class: 'js-account-input', input_help: true, input_help_link: store.customer_reset_password_url, input_link_class: 'btn-link-primary font-small mb-4 mt-3n', input_label_text: 'Contraseña' | translate } %}
{% block input_help_text %}{{ '¿Olvidaste tu contraseña?' | translate }}{% endblock input_help_text %}
{% endembed %}
{% if not result.facebook and result.invalid %}
<div class="alert alert-danger">{{ 'Estos datos no son correctos. ¿Chequeaste que estén bien escritos?' | translate }}</div>
{% endif %}
{% endblock %}
{% endembed %}
</div>
</div>
{% if 'mandatory' not in store.customer_accounts %}
<p class="mt-3 text-center">{{ "¿No tenés cuenta aún?" | translate }} <strong>{{ "Crear cuenta" | translate | a_tag(store.customer_register_url, '', 'btn-link-primary') }}</strong></p>
{% endif %}
</div>
</section>
JS
⚠️ A partir do dia 30 de janeiro de 2023, a biblioteca jQuery será removida do código de nossas lojas, portanto, a função "$" não poderá ser utilizada.
3. Precisamos adicionar o JavaScript no arquivo store.js.tpl (onde tenha as funções de JS). Isso vai permitir que o "Enviar link novamente" funcione. Vamos adicionar o seguinte código:
{% if template == 'account.register' or template == 'account.login' %} jQueryNuvem(".js-resend-validation-link").on("click", function(e){ window.accountVerificationService.resendVerificationEmail('{{ customer_email }}'); }); {% endif %}
Traduções
Neste passo adicionamos os textos para as traduções no arquivo config/translations.txt
es "Validá tu email usando el link que te enviamos a <strong>{1}</strong> cuando creaste tu cuenta." pt "Valide seu e-mail usando o link que enviamos para <strong>{1}</strong> quando você criou sua conta." en "Validate your email using the link that we sent you to <strong>{1}</strong> when you created your account." es_mx "Valida tu correo electrónico usando el link que te enviamos a <strong>{1}</strong> cuando creaste tu cuenta." es "¿No lo encontraste?" pt "Não o encontrou?" en "Didn’t find it?" es_mx "¿No lo encuentras?" es "¡Tu cuenta fue creada con éxito!" pt "Sua conta foi criada com sucesso!" en "Your account was created successfully!" es_mx "¡Tu cuenta fue creada con éxito!" es "Tu link de validación expiró." pt "Seu link de validação expirou." en "Your validation link has expired." es_mx "Tu link de validación expiró." es "Enviar link de nuevo >" pt "Enviar o link novamente >" en "Send link again >" es_mx "Enviar link de nuevo >" es "¡El link fue enviado correctamente!" pt "O link foi enviado com sucesso!" en "The link was successfully sent!" es_mx "¡El link fue enviado correctamente!" es "No pudimos enviar el email, intentalo de nuevo en unos minutos." pt "Não foi possível enviar o e-mail, tente novamente em alguns minutos." en "We couldn’t send you the email, please try again in a few minutes." es_mx "No pudimos enviar el correo electrónico, inténtalo de nuevo en unos minutos." es "¡Estás a un paso de crear tu cuenta!" pt "Você está a um passo de criar sua conta!" en "You’re one step from creating your account!" es_mx "¡Estás a un paso de crear tu cuenta!" es "Te enviamos un link a <strong>{1}</strong> para que valides tu email." pt "Enviamos um link para <strong>{1}</strong> para validar seu e-mail." en "We sent you a link to <strong>{1}</strong> to validate your email." es_mx "Te enviamos un link a <strong>{1}</strong> para que valides tu correo electrónico." es "¿Todavía no lo recibiste?" pt "Ainda não recebeu?" en "You didn’t receive it?" es_mx "¿Todavía no lo recibiste?" es "Enviar link de nuevo" pt "Enviar o link novamente" en "Send link again" es_mx "Enviar link de nuevo"
Ativação
Atualmente, para que seus clientes possam seguir criando suas contas, adicionamos uma mensagem genérica que será exibida na página de registro, para avisá-los que precisam validar seu e-mail para criar a conta.
Uma vez aplicadas todas as mudanças no seu código, você poderá remover essa mensagem genérica acessando o seguinte link, substituindo “tutiendanube.lojavirtualnuvem.com.br” pela URL da sua loja:
https://tutiendanube.lojavirtualnuvem.com.br/admin/themes/?activate-account-security-tag=true
Lembre-se que precisa estar logado no Administrador Nuvem para realizar a ativação.