Laravel Fortify
Introdução
Laravel Fortify é uma implementação de backend de autenticação agnóstica de frontend para Laravel. O Fortify registra as rotas e controladores necessários para implementar todos os recursos de autenticação do Laravel, incluindo login, registro, redefinição de senha, verificação de e-mail e muito mais. Após instalar o Fortify, você pode executar o comando Artisan route:list
para ver as rotas que o Fortify registrou.
Como o Fortify não fornece sua própria interface de usuário, ele deve ser pareado com sua própria interface de usuário, que faz solicitações às rotas que ele registra. Discutiremos exatamente como fazer solicitações a essas rotas no restante desta documentação.
NOTA
Lembre-se, o Fortify é um pacote que visa dar a você uma vantagem inicial na implementação dos recursos de autenticação do Laravel. Você não é obrigado a usá-lo. Você sempre está livre para interagir manualmente com os serviços de autenticação do Laravel seguindo a documentação disponível na documentação authentication, password reset e email checking.
O que é Fortify?
Conforme mencionado anteriormente, o Laravel Fortify é uma implementação de backend de autenticação agnóstica de frontend para o Laravel. O Fortify registra as rotas e controladores necessários para implementar todos os recursos de autenticação do Laravel, incluindo login, registro, redefinição de senha, verificação de e-mail e muito mais.
Você não precisa usar o Fortify para usar os recursos de autenticação do Laravel. Você sempre tem a liberdade de interagir manualmente com os serviços de autenticação do Laravel seguindo a documentação disponível na documentação authentication, password reset e email checking.
Se você é novo no Laravel, pode explorar o kit inicial do aplicativo Laravel Breeze antes de tentar usar o Laravel Fortify. O Laravel Breeze fornece um andaime de autenticação para seu aplicativo que inclui uma interface de usuário construída com Tailwind CSS. Ao contrário do Fortify, o Breeze publica suas rotas e controladores diretamente em seu aplicativo. Isso permite que você estude e se sinta confortável com os recursos de autenticação do Laravel antes de permitir que o Laravel Fortify implemente esses recursos para você.
O Laravel Fortify essencialmente pega as rotas e controladores do Laravel Breeze e os oferece como um pacote que não inclui uma interface de usuário. Isso permite que você ainda crie rapidamente o scaffold da implementação de backend da camada de autenticação do seu aplicativo sem estar preso a nenhuma opinião específica de frontend.
Quando devo usar o Fortify?
Você pode estar se perguntando quando é apropriado usar o Laravel Fortify. Primeiro, se você estiver usando um dos application starter kits do Laravel, não precisa instalar o Laravel Fortify, pois todos os application starter kits do Laravel já fornecem uma implementação de autenticação completa.
Se você não estiver usando um application starter kit e seu aplicativo precisar de recursos de autenticação, você tem duas opções: implementar manualmente os recursos de autenticação do seu aplicativo ou usar o Laravel Fortify para fornecer a implementação de backend desses recursos.
Se você escolher instalar o Fortify, sua interface de usuário fará solicitações às rotas de autenticação do Fortify que são detalhadas nesta documentação para autenticar e registrar usuários.
Se você escolher interagir manualmente com os serviços de autenticação do Laravel em vez de usar o Fortify, você pode fazer isso seguindo a documentação disponível na documentação authentication, password reset e email checking.
Laravel Fortify e Laravel Sanctum
Alguns desenvolvedores ficam confusos sobre a diferença entre Laravel Sanctum e Laravel Fortify. Como os dois pacotes resolvem dois problemas diferentes, mas relacionados, o Laravel Fortify e o Laravel Sanctum não são pacotes mutuamente exclusivos ou concorrentes.
O Laravel Sanctum se preocupa apenas em gerenciar tokens de API e autenticar usuários existentes usando cookies ou tokens de sessão. O Sanctum não fornece nenhuma rota que lide com registro de usuário, redefinição de senha, etc.
Se você estiver tentando construir manualmente a camada de autenticação para um aplicativo que oferece uma API ou serve como backend para um aplicativo de página única, é inteiramente possível que você utilize o Laravel Fortify (para registro de usuário, redefinição de senha, etc.) e o Laravel Sanctum (gerenciamento de token de API, autenticação de sessão).
Instalação
Para começar, instale o Fortify usando o gerenciador de pacotes do Composer:
composer require laravel/fortify
Em seguida, publique os recursos do Fortify usando o comando Artisan fortify:install
:
php artisan fortify:install
Este comando publicará as ações do Fortify no seu diretório app/Actions
, que será criado se não existir. Além disso, o FortifyServiceProvider
, o arquivo de configuração e todas as migrações de banco de dados necessárias serão publicados.
Em seguida, você deve migrar seu banco de dados:
php artisan migrate
Recursos do Fortify
O arquivo de configuração fortify
contém uma matriz de configuração features
. Esta matriz define quais rotas/recursos de backend o Fortify irá expor por padrão. Se você não estiver usando o Fortify em combinação com o Laravel Jetstream, recomendamos que você habilite apenas os seguintes recursos, que são os recursos básicos de autenticação fornecidos pela maioria dos aplicativos Laravel:
'features' => [
Features::registration(),
Features::resetPasswords(),
Features::emailVerification(),
],
Desabilitando visualizações
Por padrão, o Fortify define rotas que são destinadas a retornar visualizações, como uma tela de login ou tela de registro. No entanto, se você estiver construindo um aplicativo de página única orientado a JavaScript, pode não precisar dessas rotas. Por esse motivo, você pode desabilitar essas rotas completamente definindo o valor de configuração views
no arquivo de configuração config/fortify.php
do seu aplicativo como false
:
'views' => false,
Desabilitando visualizações e redefinição de senha
Se você escolher desabilitar as visualizações do Fortify e estiver implementando recursos de redefinição de senha para seu aplicativo, você ainda deve definir uma rota chamada password.reset
que é responsável por exibir a visualização "reset password" do seu aplicativo. Isso é necessário porque a notificação Illuminate\Auth\Notifications\ResetPassword
do Laravel gerará a URL de redefinição de senha por meio da rota chamada password.reset
.
Autenticação
Para começar, precisamos instruir o Fortify sobre como retornar nossa visualização "login". Lembre-se, o Fortify é uma biblioteca de autenticação headless. Se você quiser uma implementação frontend dos recursos de autenticação do Laravel que já estão concluídos para você, você deve usar um application starter kit.
Toda a lógica de renderização da visualização de autenticação pode ser personalizada usando os métodos apropriados disponíveis por meio da classe Laravel\Fortify\Fortify
. Normalmente, você deve chamar esse método do método boot
da classe App\Providers\FortifyServiceProvider
do seu aplicativo. O Fortify cuidará da definição da rota /login
que retorna esta visualização:
use Laravel\Fortify\Fortify;
/**
* Inicialize qualquer serviço de aplicativo.
*/
public function boot(): void
{
Fortify::loginView(function () {
return view('auth.login');
});
// ...
}
Seu modelo de login deve incluir um formulário que faça uma solicitação POST para /login
. O endpoint /login
espera uma string email
/ username
e uma password
. O nome do campo email / username deve corresponder ao valor username
dentro do arquivo de configuração config/fortify.php
. Além disso, um campo booleano remember
pode ser fornecido para indicar que o usuário gostaria de usar a funcionalidade "remember me" fornecida pelo Laravel.
Se a tentativa de login for bem-sucedida, o Fortify irá redirecioná-lo para o URI configurado por meio da opção de configuração home
dentro do arquivo de configuração fortify
do seu aplicativo. Se a solicitação de login for uma solicitação XHR, uma resposta HTTP 200 será retornada.
Se a solicitação não for bem-sucedida, o usuário será redirecionado de volta para a tela de login e os erros de validação estarão disponíveis para você por meio do $errors
compartilhado variável de modelo Blade. Ou, no caso de uma solicitação XHR, os erros de validação serão retornados com a resposta HTTP 422.
Personalizando a autenticação do usuário
O Fortify recuperará e autenticará automaticamente o usuário com base nas credenciais fornecidas e no guarda de autenticação configurado para seu aplicativo. No entanto, às vezes você pode desejar ter personalização completa sobre como as credenciais de login são autenticadas e os usuários são recuperados. Felizmente, o Fortify permite que você faça isso facilmente usando o método Fortify::authenticateUsing
.
Este método aceita um closure que recebe a solicitação HTTP de entrada. O closure é responsável por validar as credenciais de login anexadas à solicitação e retornar a instância do usuário associada. Se as credenciais forem inválidas ou nenhum usuário puder ser encontrado, null
ou false
deve ser retornado pelo closure. Normalmente, esse método deve ser chamado do método boot
do seu FortifyServiceProvider
:
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Laravel\Fortify\Fortify;
/**
* Inicialize qualquer serviço de aplicativo.
*/
public function boot(): void
{
Fortify::authenticateUsing(function (Request $request) {
$user = User::where('email', $request->email)->first();
if ($user &&
Hash::check($request->password, $user->password)) {
return $user;
}
});
// ...
}
Authentication Guard
Você pode personalizar o guard de autenticação usado pelo Fortify no arquivo de configuração fortify
do seu aplicativo. No entanto, você deve garantir que o guard configurado seja uma implementação de Illuminate\Contracts\Auth\StatefulGuard
. Se você estiver tentando usar o Laravel Fortify para autenticar um SPA, você deve usar o guard web
padrão do Laravel em combinação com Laravel Sanctum.
Personalizando o Pipeline de Autenticação
O Laravel Fortify autentica solicitações de login por meio de um pipeline de classes invocáveis. Se desejar, você pode definir um pipeline personalizado de classes pelas quais as solicitações de login devem ser canalizadas. Cada classe deve ter um método __invoke
que recebe a instância Illuminate\Http\Request
de entrada e, como middleware, uma variável $next
que é invocada para passar a solicitação para a próxima classe no pipeline.
Para definir seu pipeline personalizado, você pode usar o método Fortify::authenticateThrough
. Este método aceita um closure que deve retornar a matriz de classes para canalizar a solicitação de login. Normalmente, este método deve ser chamado do método boot
da sua classe App\Providers\FortifyServiceProvider
.
O exemplo abaixo contém a definição de pipeline padrão que você pode usar como ponto de partida ao fazer suas próprias modificações:
use Laravel\Fortify\Actions\AttemptToAuthenticate;
use Laravel\Fortify\Actions\EnsureLoginIsNotThrottled;
use Laravel\Fortify\Actions\PrepareAuthenticatedSession;
use Laravel\Fortify\Actions\RedirectIfTwoFactorAuthenticatable;
use Laravel\Fortify\Fortify;
use Illuminate\Http\Request;
Fortify::authenticateThrough(function (Request $request) {
return array_filter([
config('fortify.limiters.login') ? null : EnsureLoginIsNotThrottled::class,
Features::enabled(Features::twoFactorAuthentication()) ? RedirectIfTwoFactorAuthenticatable::class : null,
AttemptToAuthenticate::class,
PrepareAuthenticatedSession::class,
]);
});
Limitação de autenticação
Por padrão, o Fortify limitará as tentativas de autenticação usando o middleware EnsureLoginIsNotThrottled
. Este middleware limita as tentativas que são exclusivas de uma combinação de nome de usuário e endereço IP.
Alguns aplicativos podem exigir uma abordagem diferente para limitar as tentativas de autenticação, como limitar apenas pelo endereço IP. Portanto, o Fortify permite que você especifique seu próprio limitador de taxa por meio da opção de configuração fortify.limiters.login
. Claro, essa opção de configuração está localizada no arquivo de configuração config/fortify.php
do seu aplicativo.
NOTA
Utilizar uma mistura de limitação, autenticação de dois fatores e um firewall de aplicativo da Web externo (WAF) fornecerá a defesa mais robusta para seus usuários legítimos de aplicativos.
Personalizando redirecionamentos
Se a tentativa de login for bem-sucedida, o Fortify redirecionará você para o URI configurado por meio da opção de configuração home
no arquivo de configuração fortify
do seu aplicativo. Se a solicitação de login for uma solicitação XHR, uma resposta HTTP 200 será retornada. Após um usuário efetuar logout do aplicativo, o usuário será redirecionado para o URI /
.
Se precisar de personalização avançada desse comportamento, você pode vincular implementações dos contratos LoginResponse
e LogoutResponse
ao Laravel contêiner de serviço. Normalmente, isso deve ser feito dentro do método register
da classe App\Providers\FortifyServiceProvider
do seu aplicativo:
use Laravel\Fortify\Contracts\LogoutResponse;
/**
* Registre quaisquer serviços de aplicação.
*/
public function register(): void
{
$this->app->instance(LogoutResponse::class, new class implements LogoutResponse {
public function toResponse($request)
{
return redirect('/');
}
});
}
Autenticação de dois fatores
Quando o recurso de autenticação de dois fatores do Fortify está habilitado, o usuário precisa inserir um token numérico de seis dígitos durante o processo de autenticação. Esse token é gerado usando uma senha de uso único baseada em tempo (TOTP) que pode ser recuperada de qualquer aplicativo de autenticação móvel compatível com TOTP, como o Google Authenticator.
Antes de começar, você deve primeiro garantir que o modelo App\Models\User
do seu aplicativo use o trait Laravel\Fortify\TwoFactorAuthenticatable
:
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Fortify\TwoFactorAuthenticatable;
class User extends Authenticatable
{
use Notifiable, TwoFactorAuthenticatable;
}
Em seguida, você deve criar uma tela dentro do seu aplicativo onde os usuários podem gerenciar suas configurações de autenticação de dois fatores. Esta tela deve permitir que o usuário habilite e desabilite a autenticação de dois fatores, bem como regenere seus códigos de recuperação de autenticação de dois fatores.
Por padrão, o array
features
do arquivo de configuraçãofortify
instrui as configurações de autenticação de dois fatores do Fortify a exigir confirmação de senha antes da modificação. Portanto, seu aplicativo deve implementar o recurso confirmação de senha do Fortify antes de continuar.
Habilitando a autenticação de dois fatores
Para começar a habilitar a autenticação de dois fatores, seu aplicativo deve fazer uma solicitação POST para o endpoint /user/two-factor-authentication
definido pelo Fortify. Se a solicitação for bem-sucedida, o usuário será redirecionado de volta para a URL anterior e a variável de sessão status
será definida como two-factor-authentication-enabled
. Você pode detectar essa variável de sessão status
em seus modelos para exibir a mensagem de sucesso apropriada. Se a solicitação for uma solicitação XHR, a resposta HTTP 200
será retornada.
Após escolher habilitar a autenticação de dois fatores, o usuário ainda deve "confirmar" sua configuração de autenticação de dois fatores fornecendo um código de autenticação de dois fatores válido. Portanto, sua mensagem de "sucesso" deve instruir o usuário que a confirmação da autenticação de dois fatores ainda é necessária:
@if (session('status') == 'two-factor-authentication-enabled')
<div class="mb-4 font-medium text-sm">
Please finish configuring two factor authentication below.
</div>
@endif
Em seguida, você deve exibir o código QR da autenticação de dois fatores para o usuário escanear em seu aplicativo autenticador. Se estiver usando o Blade para renderizar o frontend do seu aplicativo, você pode recuperar o código QR SVG usando o método twoFactorQrCodeSvg
disponível na instância do usuário:
$request->user()->twoFactorQrCodeSvg();
Se estiver construindo um frontend com JavaScript, você pode fazer uma solicitação XHR GET para o endpoint /user/two-factor-qr-code
para recuperar o código QR da autenticação de dois fatores do usuário. Este endpoint retornará um objeto JSON contendo uma chave svg
.
Confirmando a autenticação de dois fatores
Além de exibir o código QR de autenticação de dois fatores do usuário, você deve fornecer uma entrada de texto onde o usuário pode fornecer um código de autenticação válido para "confirmar" sua configuração de autenticação de dois fatores. Este código deve ser fornecido ao aplicativo Laravel por meio de uma solicitação POST para o endpoint /user/confirmed-two-factor-authentication
definido pelo Fortify.
Se a solicitação for bem-sucedida, o usuário será redirecionado de volta para a URL anterior e a variável de sessão status
será definida como two-factor-authentication-confirmed
:
@if (session('status') == 'two-factor-authentication-confirmed')
<div class="mb-4 font-medium text-sm">
Two factor authentication confirmed and enabled successfully.
</div>
@endif
Se a solicitação para o endpoint de confirmação de autenticação de dois fatores foi feita por meio de uma solicitação XHR, uma resposta HTTP 200
será retornada.
Exibindo os códigos de recuperação
Você também deve exibir os códigos de recuperação de dois fatores do usuário. Esses códigos de recuperação permitem que o usuário se autentique caso perca o acesso ao seu dispositivo móvel. Se estiver usando o Blade para renderizar o frontend do seu aplicativo, você pode acessar os códigos de recuperação por meio da instância do usuário autenticado:
(array) $request->user()->recoveryCodes()
Se estiver construindo um frontend com JavaScript, você pode fazer uma solicitação XHR GET para o endpoint /user/two-factor-recovery-codes
. Este endpoint retornará uma matriz JSON contendo os códigos de recuperação do usuário.
Para regenerar os códigos de recuperação do usuário, seu aplicativo deve fazer uma solicitação POST para o endpoint /user/two-factor-recovery-codes
.
Autenticando com autenticação de dois fatores
Durante o processo de autenticação, o Fortify redirecionará automaticamente o usuário para a tela de desafio de autenticação de dois fatores do seu aplicativo. No entanto, se seu aplicativo estiver fazendo uma solicitação de login XHR, a resposta JSON retornada após uma tentativa de autenticação bem-sucedida conterá um objeto JSON que tem uma propriedade booleana two_factor
. Você deve inspecionar esse valor para saber se deve redirecionar para a tela de desafio de autenticação de dois fatores do seu aplicativo.
Para começar a implementar a funcionalidade de autenticação de dois fatores, precisamos instruir o Fortify sobre como retornar nossa visualização de desafio de autenticação de dois fatores. Toda a lógica de renderização da visualização de autenticação do Fortify pode ser personalizada usando os métodos apropriados disponíveis por meio da classe Laravel\Fortify\Fortify
. Normalmente, você deve chamar esse método do método boot
da classe App\Providers\FortifyServiceProvider
do seu aplicativo:
use Laravel\Fortify\Fortify;
/**
* Inicialize qualquer serviço de aplicativo.
*/
public function boot(): void
{
Fortify::twoFactorChallengeView(function () {
return view('auth.two-factor-challenge');
});
// ...
}
O Fortify cuidará da definição da rota /two-factor-challenge
que retorna essa visualização. Seu modelo two-factor-challenge
deve incluir um formulário que faz uma solicitação POST para o ponto de extremidade /two-factor-challenge
. A ação /two-factor-challenge
espera um campo code
que contém um token TOTP válido ou um campo recovery_code
que contém um dos códigos de recuperação do usuário.
Se a tentativa de login for bem-sucedida, o Fortify redirecionará o usuário para o URI configurado por meio da opção de configuração home
no arquivo de configuração fortify
do seu aplicativo. Se a solicitação de login for uma solicitação XHR, uma resposta HTTP 204 será retornada.
Se a solicitação não for bem-sucedida, o usuário será redirecionado de volta para a tela de desafio de dois fatores e os erros de validação estarão disponíveis para você por meio do $errors
compartilhado variável de modelo Blade. Ou, no caso de uma solicitação XHR, os erros de validação serão retornados com uma resposta HTTP 422.
Desabilitando a autenticação de dois fatores
Para desabilitar a autenticação de dois fatores, seu aplicativo deve fazer uma solicitação DELETE para o endpoint /user/two-factor-authentication
. Lembre-se, os endpoints de autenticação de dois fatores do Fortify exigem confirmação de senha antes de serem chamados.
Registro
Para começar a implementar a funcionalidade de registro do nosso aplicativo, precisamos instruir o Fortify sobre como retornar nossa visualização "registrar". Lembre-se, o Fortify é uma biblioteca de autenticação headless. Se você quiser uma implementação frontend dos recursos de autenticação do Laravel que já estão concluídos para você, você deve usar um application starter kit.
Toda a lógica de renderização de visualização do Fortify pode ser personalizada usando os métodos apropriados disponíveis por meio da classe Laravel\Fortify\Fortify
. Normalmente, você deve chamar este método do método boot
da sua classe App\Providers\FortifyServiceProvider
:
use Laravel\Fortify\Fortify;
/**
* Inicialize qualquer serviço de aplicativo.
*/
public function boot(): void
{
Fortify::registerView(function () {
return view('auth.register');
});
// ...
}
O Fortify cuidará da definição da rota /register
que retorna esta visualização. Seu modelo register
deve incluir um formulário que faz uma solicitação POST para o endpoint /register
definido pelo Fortify.
O endpoint /register
espera uma string name
, string email address / username, password
e campos password_confirmation
. O nome do campo de e-mail/nome de usuário deve corresponder ao valor de configuração username
definido no arquivo de configuração fortify
do seu aplicativo.
Se a tentativa de registro for bem-sucedida, o Fortify redirecionará o usuário para o URI configurado por meio da opção de configuração home
no arquivo de configuração fortify
do seu aplicativo. Se a solicitação for uma solicitação XHR, uma resposta HTTP 201 será retornada.
Se a solicitação não for bem-sucedida, o usuário será redirecionado de volta para a tela de registro e os erros de validação estarão disponíveis para você por meio do $errors
compartilhado variável de modelo Blade. Ou, no caso de uma solicitação XHR, os erros de validação serão retornados com uma resposta HTTP 422.
Personalizando o Registro
O processo de validação e criação do usuário pode ser personalizado modificando a ação App\Actions\Fortify\CreateNewUser
que foi gerada quando você instalou o Laravel Fortify.
Redefinição de Senha
Solicitando um Link de Redefinição de Senha
Para começar a implementar a funcionalidade de redefinição de senha do nosso aplicativo, precisamos instruir o Fortify sobre como retornar nossa visualização "esqueci a senha". Lembre-se, o Fortify é uma biblioteca de autenticação sem interface. Se você quiser uma implementação frontend dos recursos de autenticação do Laravel que já estão concluídos para você, você deve usar um application starter kit.
Toda a lógica de renderização de visualização do Fortify pode ser personalizada usando os métodos apropriados disponíveis por meio da classe Laravel\Fortify\Fortify
. Normalmente, você deve chamar esse método do método boot
da classe App\Providers\FortifyServiceProvider
do seu aplicativo:
use Laravel\Fortify\Fortify;
/**
* Inicialize qualquer serviço de aplicativo.
*/
public function boot(): void
{
Fortify::requestPasswordResetLinkView(function () {
return view('auth.forgot-password');
});
// ...
}
O Fortify cuidará da definição do endpoint /forgot-password
que retorna essa visualização. Seu modelo forgot-password
deve incluir um formulário que faz uma solicitação POST para o endpoint /forgot-password
.
O endpoint /forgot-password
espera um campo email
de string. O nome desse campo/coluna do banco de dados deve corresponder ao valor de configuração email
dentro do arquivo de configuração fortify
do seu aplicativo.
Lidando com a resposta da solicitação de link de redefinição de senha
Se a solicitação de link de redefinição de senha for bem-sucedida, o Fortify redirecionará o usuário de volta ao endpoint /forgot-password
e enviará um e-mail ao usuário com um link seguro que ele pode usar para redefinir sua senha. Se a solicitação for uma solicitação XHR, uma resposta HTTP 200 será retornada.
Após ser redirecionado de volta ao endpoint /forgot-password
após uma solicitação bem-sucedida, a variável de sessão status
pode ser usada para exibir o status da tentativa de solicitação de link de redefinição de senha.
O valor da variável de sessão $status
corresponderá a uma das strings de tradução definidas no arquivo de idioma passwords
do seu aplicativo](/docs/localization). Se você quiser personalizar esse valor e não tiver publicado os arquivos de idioma do Laravel, você pode fazer isso por meio do comando Artisan lang:publish
:
@if (session('status'))
<div class="mb-4 font-medium text-sm text-green-600">
{{ session('status') }}
</div>
@endif
Se a solicitação não for bem-sucedida, o usuário será redirecionado de volta para a tela do link de redefinição de senha de solicitação e os erros de validação estarão disponíveis para você por meio do $errors
compartilhado variável de modelo Blade. Ou, no caso de uma solicitação XHR, os erros de validação serão retornados com uma resposta HTTP 422.
Redefinindo a senha
Para terminar de implementar a funcionalidade de redefinição de senha do nosso aplicativo, precisamos instruir o Fortify sobre como retornar nossa visualização "redefinir senha".
Toda a lógica de renderização de visualização do Fortify pode ser personalizada usando os métodos apropriados disponíveis por meio da classe Laravel\Fortify\Fortify
. Normalmente, você deve chamar esse método do método boot
da classe App\Providers\FortifyServiceProvider
do seu aplicativo:
use Laravel\Fortify\Fortify;
use Illuminate\Http\Request;
/**
* Inicialize qualquer serviço de aplicativo.
*/
public function boot(): void
{
Fortify::resetPasswordView(function (Request $request) {
return view('auth.reset-password', ['request' => $request]);
});
// ...
}
O Fortify cuidará da definição da rota para exibir essa visualização. Seu modelo reset-password
deve incluir um formulário que faz uma solicitação POST para /reset-password
.
O endpoint /reset-password
espera um campo email
de string, um campo password
, um campo password_confirmation
e um campo oculto chamado token
que contém o valor de request()->route('token')
. O nome do campo "email" / coluna do banco de dados deve corresponder ao valor de configuração email
definido no arquivo de configuração fortify
do seu aplicativo.
Lidando com a resposta de redefinição de senha
Se a solicitação de redefinição de senha for bem-sucedida, o Fortify redirecionará de volta para a rota /login
para que o usuário possa efetuar login com sua nova senha. Além disso, uma variável de sessão status
será definida para que você possa exibir o status bem-sucedido da redefinição na sua tela de login:
@if (session('status'))
<div class="mb-4 font-medium text-sm text-green-600">
{{ session('status') }}
</div>
@endif
Se a solicitação for uma solicitação XHR, uma resposta HTTP 200 será retornada.
Se a solicitação não for bem-sucedida, o usuário será redirecionado de volta para a tela de redefinição de senha e os erros de validação estarão disponíveis para você por meio do $errors
compartilhado variável de modelo Blade. Ou, no caso de uma solicitação XHR, os erros de validação serão retornados com uma resposta HTTP 422.
Personalizando redefinições de senha
O processo de redefinição de senha pode ser personalizado modificando a ação App\Actions\ResetUserPassword
que foi gerada quando você instalou o Laravel Fortify.
Verificação de e-mail
Após o registro, você pode desejar que os usuários verifiquem seus endereços de e-mail antes de continuarem acessando seu aplicativo. Para começar, certifique-se de que o recurso emailVerification
esteja habilitado no array features
do seu arquivo de configuração fortify
. Em seguida, você deve garantir que sua classe App\Models\User
implemente a interface Illuminate\Contracts\Auth\MustVerifyEmail
.
Depois que essas duas etapas de configuração forem concluídas, os usuários recém-registrados receberão um e-mail solicitando que verifiquem a propriedade do endereço de e-mail. No entanto, precisamos informar ao Fortify como exibir a tela de verificação de e-mail que informa ao usuário que ele precisa clicar no link de verificação no e-mail.
Toda a lógica de renderização da visualização do Fortify pode ser personalizada usando os métodos apropriados disponíveis por meio da classe Laravel\Fortify\Fortify
. Normalmente, você deve chamar esse método do método boot
da classe App\Providers\FortifyServiceProvider
do seu aplicativo:
use Laravel\Fortify\Fortify;
/**
* Inicialize qualquer serviço de aplicativo.
*/
public function boot(): void
{
Fortify::verifyEmailView(function () {
return view('auth.verify-email');
});
// ...
}
O Fortify cuidará da definição da rota que exibe essa visualização quando um usuário for redirecionado para o endpoint /email/verify
pelo middleware verified
integrado do Laravel.
Seu modelo verify-email
deve incluir uma mensagem informativa instruindo o usuário a clicar no link de verificação de e-mail que foi enviado para seu endereço de e-mail.
Reenviando links de verificação de e-mail
Se desejar, você pode adicionar um botão ao modelo verify-email
do seu aplicativo que dispara uma solicitação POST para o endpoint /email/verification-notification
. Quando esse endpoint recebe uma solicitação, um novo link de e-mail de verificação será enviado ao usuário, permitindo que ele obtenha um novo link de verificação se o anterior foi acidentalmente excluído ou perdido.
Se a solicitação para reenviar o e-mail do link de verificação for bem-sucedida, o Fortify redirecionará o usuário de volta para o endpoint /email/verify
com uma variável de sessão status
, permitindo que você exiba uma mensagem informativa ao usuário informando que a operação foi bem-sucedida. Se a solicitação for uma solicitação XHR, uma resposta HTTP 202 será retornada:
@if (session('status') == 'verification-link-sent')
<div class="mb-4 font-medium text-sm text-green-600">
A new email verification link has been emailed to you!
</div>
@endif
Protegendo rotas
Para especificar que uma rota ou grupo de rotas requer que o usuário tenha verificado seu endereço de e-mail, você deve anexar o middleware verified
integrado do Laravel à rota. O alias do middleware verified
é registrado automaticamente pelo Laravel e serve como um alias para o middleware Illuminate\Routing\Middleware\ValidateSignature
:
Route::get('/dashboard', function () {
// ...
})->middleware(['verified']);
Confirmação de senha
Ao construir seu aplicativo, você pode ocasionalmente ter ações que devem exigir que o usuário confirme sua senha antes que a ação seja realizada. Normalmente, essas rotas são protegidas pelo middleware password.confirm
integrado do Laravel.
Para começar a implementar a funcionalidade de confirmação de senha, precisamos instruir o Fortify sobre como retornar a visualização de "confirmação de senha" do nosso aplicativo. Lembre-se, o Fortify é uma biblioteca de autenticação sem interface. Se você quiser uma implementação frontend dos recursos de autenticação do Laravel que já estão concluídos para você, você deve usar um kit inicial do aplicativo.
Toda a lógica de renderização de visualização do Fortify pode ser personalizada usando os métodos apropriados disponíveis por meio da classe Laravel\Fortify\Fortify
. Normalmente, você deve chamar esse método do método boot
da classe App\Providers\FortifyServiceProvider
do seu aplicativo:
use Laravel\Fortify\Fortify;
/**
* Inicialize qualquer serviço de aplicativo.
*/
public function boot(): void
{
Fortify::confirmPasswordView(function () {
return view('auth.confirm-password');
});
// ...
}
O Fortify cuidará da definição do endpoint /user/confirm-password
que retorna essa visualização. Seu modelo confirm-password
deve incluir um formulário que faz uma solicitação POST para o endpoint /user/confirm-password
. O endpoint /user/confirm-password
espera um campo password
que contém a senha atual do usuário.
Se a senha corresponder à senha atual do usuário, o Fortify redirecionará o usuário para a rota que ele estava tentando acessar. Se a solicitação for uma solicitação XHR, uma resposta HTTP 201 será retornada.
Se a solicitação não for bem-sucedida, o usuário será redirecionado de volta para a tela de confirmação de senha e os erros de validação estarão disponíveis para você por meio da variável de modelo Blade $errors
compartilhada. Ou, no caso de uma solicitação XHR, os erros de validação serão retornados com uma resposta HTTP 422.