Autenticação de usuários
Nesta página
Visão geral
Neste guia, você aprenderá como autenticar usuários do MongoDB usando a funcionalidade de autenticação nativa do Laravel.
O Laravel fornece um Auth
módulo nativo que inclui serviços de autenticação, como guardas que definem como os usuários são autenticados e fornecedores que definem como os usuários são recuperados. Para saber mais sobre esses serviços, consulte Autenticação na documentação do Laravel.
Modificar o modelo de usuário
Por padrão, o Laravel gera o modelo User
Eloquent no seu diretório App/Models
. Para habilitar a autenticação para usuários MongoDB , seu modelo User
deve estender a classe MongoDB\Laravel\Auth\User
.
Para estender essa classe, navegue até seu arquivo app/Models/User.php
e substitua a declaração use Illuminate\Foundation\Auth\User as Authenticatable
pelo seguinte código:
use MongoDB\Laravel\Auth\User as Authenticatable;
Em seguida, certifique-se de que sua classe User
estenda Authenticatable
, conforme mostrado no código a seguir:
class User extends Authenticatable { ... }
Após configurar seu modelo User
, crie um controlador correspondente. Para saber como criar um controlador, consulte a seção Criar o controlador de usuário nesta página.
Exemplo
O seguinte código mostra um arquivo User.php
que estende a classe MongoDB\Laravel\Auth\User
:
namespace App\Models; use MongoDB\Laravel\Auth\User as Authenticatable; class User extends Authenticatable { protected $connection = 'mongodb'; protected $table = 'users'; protected $fillable = [ 'name', 'email', 'password', ]; protected $hidden = [ 'password', 'remember_token', ]; }
Criar o Controlador de Usuário
Para armazenar funções que gerenciam autenticação, crie um controlador de autenticação para seu modelo User
.
Execute o seguinte comando a partir da raiz do seu projeto para criar um controlador:
php artisan make:controller <filename>
Exemplo
O seguinte comando cria um arquivo de controlador denominado AuthController.php
:
php artisan make:controller AuthController
O arquivo AuthController.php
pode armazenar as funções login()
e logout()
para gerenciar a autenticação do usuário, conforme mostrado no código a seguir:
namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Validation\ValidationException; use function response; class AuthController extends Controller { public function login(Request $request) { $request->validate([ 'email' => 'required|email', 'password' => 'required', ]); if (Auth::attempt($request->only('email', 'password'))) { return response()->json([ 'user' => Auth::user(), 'message' => 'Successfully logged in', ]); } throw ValidationException::withMessages([ 'email' => ['The provided credentials are incorrect.'], ]); } public function logout() { Auth::logout(); return response()->json(['message' => 'Successfully logged out']); } }
Personalizar autenticação do usuário
Você pode personalizar seus arquivos de autenticação para se alinhar com as necessidades do seu aplicativo e habilitar recursos de autenticação adicionais.
Esta seção descreve como usar os seguintes recursos para personalizar o processo de autenticação de usuário do MongoDB :
Laravel Sanctum
O Laravel Sanctum é um pacote de autenticação que pode gerenciar solicitações de API e a autenticação de aplicação de página única. Para gerenciar solicitações de API, o Sanctum emite tokens de API que são armazenados no banco de banco de dados e autentica solicitações HTTP de entrada usando o cabeçalho Authorization
. Para autenticar aplicativos de página única, o Sanctum usa os serviços de autenticação baseados em cookies do Laravel.
Você pode instalar o Laravel Sanctum para gerenciar o processo de autenticação do seu aplicativo. Execute os seguintes comandos a partir da raiz do seu projeto para instalar o Laravel Sanctum e publicar seu arquivo de migração:
composer require laravel/sanctum php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
Para usar o Laravel Sanctum com a integração do Laravel, modifique o modelo PersonalAccessToken
fornecido pelo Sanctum para usar a funcionalidade DocumentModel
do namespace MongoDB\Laravel\Eloquent
. O seguinte código modifica o modelo PersonalAccessToken
para habilitar o MongoDB:
namespace App\Models; use Laravel\Sanctum\PersonalAccessToken as SanctumToken; use MongoDB\Laravel\Eloquent\DocumentModel; class PersonalAccessToken extends SanctumToken { use DocumentModel; protected $connection = 'mongodb'; protected $table = 'personal_access_tokens'; protected $primaryKey = '_id'; protected $keyType = 'string'; }
Em seguida, execute o seguinte comando para modificar o esquema do banco de dados de dados:
php artisan migrate
Agora você pode instruir o Sanctum a usar o modelo PersonalAccessToken
personalizado chamando o método usePersonalAccessTokenModel()
em um dos provedores de serviços do seu aplicativo. Para saber mais, consulte Substituição de modelos padrão no guia do Laravel Sanctum.
Dica
Para saber mais sobre a traça DocumentModel
, consulte Estender classes de modelo de terceiros no guia de classes de modelo Eloquent.
Passaporte Laravel
O Laravel Passport é uma implementação de servidor OAuth 2.0 que oferece autenticação de API para aplicativos Laravel. Use o Laravel Passport se seu aplicação exigir suporte do OAuth2 .
Dica
Para saber mais sobre o Laravel Passport e o protocolo OAuth 2.0 , consulte os seguintes recursos:
Passaporte Laravel na documentação do Laravel.
OAuth 2.0 no site do OAuth.
Instalar o Laravel Passport
Para instalar o Laravel Passport e executar as migrações de banco de dados de dados necessárias para armazenar clientes OAuth2 , execute o seguinte comando a partir da raiz do projeto :
php artisan install:api --passport
Em seguida, navegue até seu modelo User
e adicione a traça Laravel\Passport\HasApiTokens
. Essa feature fornece métodos assistente que permitem inspecionar o token de autenticação e os escopos de um usuário. O seguinte código mostra como adicionar Laravel\Passport\HasApiTokens
ao seu arquivo app\Models\User.php
:
namespace App\Models; use MongoDB\Laravel\Auth\User as Authenticatable; use Laravel\Passport\HasApiTokens; class User extends Authenticatable { use HasApiTokens; ... }
Em seguida, defina uma proteção de autenticação api
no seu arquivo config\auth.php
e defina a opção driver
como passport
. Isso instrui seu aplicação a usar a classe TokenGuard
do Laravel Passport para autenticar solicitações de API. O exemplo a seguir adiciona a api
proteção de autenticação à guards
array :
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
Usar o Laravel Passport com o Laravel MongoDB
Após instalar o Laravel Passport, você deve habilitar a compatibilidade do Passport com o MongoDB definindo modelos personalizados de integração com o Laravel que estendem os modelos correspondentes do Passport. Para estender cada classe de modelo do Passport, inclua a traço DocumentModel
nos modelos personalizados. Você pode definir as seguintes classes de modelo de Integração com o Laravel:
MongoDB\Laravel\Passport\AuthCode
, que se estendeLaravel\Passport\AuthCode
MongoDB\Laravel\Passport\Client
, que se estendeLaravel\Passport\Client
MongoDB\Laravel\Passport\PersonalAccessClient
, que se estendeLaravel\Passport\PersonalAccessClient
MongoDB\Laravel\Passport\RefreshToken
, que se estendeLaravel\Passport\RefreshToken
MongoDB\Laravel\Passport\Token
, que se estendeLaravel\Passport\Token
O código de exemplo a seguir estende a classe de modelo Laravel\Passport\AuthCode
padrão ao definir uma classe MongoDB\Laravel\Passport\AuthCode
e inclui a traço DocumentModel
:
class MongoDB\Laravel\Passport\AuthCode extends Laravel\Passport\AuthCode { use MongoDB\Laravel\Eloquent\DocumentModel; protected $primaryKey = '_id'; protected $keyType = 'string'; }
Depois de definir modelos personalizados que estendem cada classe Laravel\Passport
, instrua o Passport a usar os modelos no método boot()
1} da classe App\Providers\AppServiceProvider
do seu aplicativo. O exemplo seguinte adiciona cada modelo personalizado ao método boot()
:
namespace App\Providers; use Illuminate\Support\ServiceProvider; use MongoDB\Laravel\Passport\AuthCode; use MongoDB\Laravel\Passport\Client; use MongoDB\Laravel\Passport\PersonalAccessClient; use MongoDB\Laravel\Passport\RefreshToken; use MongoDB\Laravel\Passport\Token; class AppServiceProvider extends ServiceProvider { /** * Register any application services. */ public function register(): void { } /** * Bootstrap any application services. */ public function boot(): void { Passport::useAuthCodeModel(AuthCode::class); Passport::useClientModel(Client::class); Passport::usePersonalAccessClientModel(PersonalAccessClient::class); Passport::useRefreshTokenModel(RefreshToken::class); Passport::useTokenModel(Token::class); } }
Em seguida, você pode usar o Laravel Passport e o MongoDB em seu aplicação.
Lembretes de senha
Para adicionar suporte a Lembretes de senha baseados no MongoDB, registre o seguinte provedor de serviços em seu aplicação:
MongoDB\Laravel\Auth\PasswordResetServiceProvider::class
Este provedor de serviços modifica o DatabaseReminderRepository
interno para habilitar avisos de senha.
Exemplo
O seguinte código atualiza o arquivo providers.php
no diretório bootstrap
de um aplicação Laravel para registrar o fornecedor do PasswordResetServiceProvider
:
return [ App\Providers\AppServiceProvider::class, MongoDB\Laravel\MongoDBServiceProvider::class, MongoDB\Laravel\Auth\PasswordResetServiceProvider::class ];
Informações adicionais
Para saber mais sobre autenticação de usuário, consulte Autenticação na documentação do Laravel.
Para saber mais sobre os modelos Eloquent, consulte o guia Classe de modelo Eloquent .