Verificação por Email com Laravel: A verificação por e-mail é uma prática fundamental em aplicações web para validar a identidade dos usuários e garantir a segurança da plataforma. O Laravel oferece ferramentas integradas para implementar essa funcionalidade de forma simples e eficiente.
Neste artigo, vamos explorar passo a passo como configurar a verificação por e-mail em sua aplicação Laravel, com um exemplo prático completo.
Preparação do Model
O primeiro passo é preparar o modelo de usuário para suportar a verificação por e-mail. No Laravel, essa funcionalidade é implementada através do trait MustVerifyEmail
. Adicione este trait ao seu modelo de usuário:
PHP
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable implements MustVerifyEmail
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
Ao incluir o trait MustVerifyEmail
, o Laravel automaticamente adiciona um campo email_verified_at
à tabela de usuários e implementa a lógica necessária para verificar o e-mail.
Preparação do Banco de Dados
Para armazenar a informação sobre a verificação do e-mail, o Laravel adicionará um campo email_verified_at
à sua tabela de usuários. Certifique-se de que sua migração esteja atualizada para incluir este campo:
PHP
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
}
Configuração do E-mail
Configure suas credenciais de e-mail no arquivo config/mail.php
. Você pode utilizar serviços como Mailgun, SendGrid ou o servidor SMTP do seu provedor de e-mail.
PHP
'mail' => [
'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.mailtrap.io'),
'port' => env('MAIL_PORT', 2525),
'from' => [
'address' => env('MAIL_FROM_ADDRESS', '[email protected]'),
'name' => env('MAIL_FROM_NAME', 'Your Application'),
],
// ... outras configurações
],
Criando a Rota de Verificação
Crie uma rota para lidar com a verificação do e-mail:
PHP
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\VerifiesEmails;
class VerificationController extends Controller
{
use VerifiesEmails;
/**
* Where to redirect users after verification.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth')->only('resend');
$this->middleware('signed')->only('verify');
}
}
Enviando o E-mail de Verificação
Ao registrar um novo usuário, utilize o método sendEmailVerificationNotification
para enviar o e-mail de verificação:
PHP
use Illuminate\Support\Facades\Auth;
// ...
Auth::user()->sendEmailVerificationNotification();
Personalizando o E-mail
Você pode personalizar o e-mail de verificação criando uma notificação personalizada:
PHP
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
class VerifyEmail extends Notification
{
use Queueable;
public function via($notifiable)
{
return ['mail'];
}
public function toMail($notifiable)
{
return (new MailMessage)
->line('Please click the button below to verify your email address.')
->action('Verify Email', route('verification.verify', ['id' => $notifiable->id, 'hash' => $notifiable->email_verify_token]))
->line('If you did not request this verification, no further action is required.');
}
}
Completando a Verificação
Quando o usuário clica no link de verificação no e-mail, a rota verify
será chamada e o e-mail do usuário será marcado como verificado.
Exemplo completo:
PHP
// routes/web.php
Route::get('/email/verify', function () {
return view('auth.verify-email');
})->middleware('auth')->name('verification.notice');
Route::get('/email/verify/{id}/{hash}', [VerificationController::class, 'verify'])->name('verification.verify');
Observações:
- Personalização: Você pode personalizar o conteúdo do e-mail de verificação, o layout da página de verificação e o fluxo de autenticação após a verificação.
- Segurança: Utilize um sistema de geração de tokens seguro para os links de verificação.
- Testes: Teste cuidadosamente a funcionalidade de verificação de e-mail em diferentes cenários.
Ao seguir esses passos e personalizar o código de acordo com suas necessidades, você terá uma implementação robusta e segura de verificação por e-mail em sua aplicação Laravel.
Conclusão
Verificação por Email com Laravel: A verificação por e-mail é uma etapa importante para garantir a segurança e a integridade de sua aplicação. O Laravel oferece ferramentas poderosas e fáceis de usar para implementar essa funcionalidade. Ao seguir os passos descritos neste artigo, você poderá configurar a verificação por e-mail em sua aplicação e garantir que seus usuários verifiquem seus endereços de e-mail antes de acessar todas as funcionalidades da sua aplicação.
Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:
E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados: