ANNOUNCEMENT: Voyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas.
Learn more
Menu Docs

Autenticação de usuários

Neste guia, você aprenderá como autenticar usuários do MongoDB usando a funcionalidade de autenticação nativa do Laravel.

O Laravel fornece um módulo Auth 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.

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.

O seguinte código mostra um arquivo User.php que estende a classe MongoDB\Laravel\Auth\User :

<?php
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',
];
}

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>

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:

<?php
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']);
}
}

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 :

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:

<?php
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 $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ço DocumentModel , consulte Estender classes de modelo de terceiros no guia Classe de modelo Eloquent.

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:

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 :

<?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',
],
],

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 estende Laravel\Passport\AuthCode

  • MongoDB\Laravel\Passport\Client, que estende Laravel\Passport\Client

  • MongoDB\Laravel\Passport\PersonalAccessClient, que estende Laravel\Passport\PersonalAccessClient

  • MongoDB\Laravel\Passport\RefreshToken, que estende Laravel\Passport\RefreshToken

  • MongoDB\Laravel\Passport\Token, que estende Laravel\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() :

<?php
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.

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.

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
];

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 .