Menu Docs
Página inicial do Docs
/ / /
Laravel MongoDB

Autenticação de usuários

Nesta página

  • Visão geral
  • Modificar o modelo de usuário
  • Exemplo
  • Criar o Controlador de Usuário
  • Exemplo
  • Personalizar autenticação do usuário
  • Laravel Sanctum
  • Passaporte Laravel
  • Lembretes de senha
  • Informações adicionais

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 estes 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ça DocumentModel , consulte Estender classes de modelo de terceiros no guia de classes 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 se estende Laravel\Passport\AuthCode

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

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

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

  • MongoDB\Laravel\Passport\Token, que se 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 .

Voltar

Construtor de Query