Maison cadre php Laravel Développement Laravel : Comment implémenter l'authentification API à l'aide de Laravel Sanctum ?

Développement Laravel : Comment implémenter l'authentification API à l'aide de Laravel Sanctum ?

Jun 14, 2023 am 08:21 AM
laravel sanctum api验证

Avec la popularité des API RESTful et l'utilisation généralisée des applications, de plus en plus d'applications nécessitent une authentification et une autorisation des API, la sécurité des API est donc devenue un aspect extrêmement important dans le développement logiciel actuel. Laravel Sanctum est un système d'authentification léger introduit directement avec Laravel 7.0, conçu pour rendre l'authentification API simple et sécurisée. Dans cet article, nous expliquerons comment utiliser Sanctum dans Laravel pour garantir la sécurité des API.

  1. Installer Laravel Sanctum

Avant de commencer, nous devons confirmer que la version Laravel 7.0+ a été installée. Ensuite, nous pouvons utiliser composer pour installer les dépendances de Laravel Sanctum :

composer require laravel/sanctum
Copier après la connexion

Après avoir installé Sanctum, ajoutez le code suivant au fichier config/app.php : config/app.php文件中加入以下代码:

'providers' => [
    // ...
    LaravelSanctumSanctumServiceProvider::class,
],

'aliases' => [
    //...
    'Sanctum' => LaravelSanctumSanctum::class,
]
Copier après la connexion

这样,Laravel应用程序就已经使用了Sanctum提供的服务和功能。

  1. 配置数据库

接下来,在执行数据库迁移之前,我们需要设置Sanctum的数据库表。 Larave lSanctum默认提供了一个包含以下字段的personal_access_tokens数据库表:

  • id:令牌的唯一标识符
  • tokenable_type:与令牌关联的模型的类名
  • tokenable_id:与令牌关联的模型的ID
  • name:令牌的名称
  • token:API令牌的值
  • abilities:令牌的授权

在创建personal_access_tokens表之前,我们需要先创建模型关系。可以通过在AuthServiceProvider中注册以下内容来完成:

use LaravelSanctumSanctum;
//...

public function boot()
{
    $this->registerPolicies(); 

    Sanctum::ignoreMigrations();

    Sanctum::actingAs( null, [
        'superuser'
    ]);
}
Copier après la connexion

Sanctum::ignoreMigrations()用于阻止Laravel在artisan migrate命令中执行Sanctum的数据库迁移文件。但是,在大多数情况下,我们只是将其添加到数据库迁移文件的命令中。Sanctum::actingAs()还提供了一种仅用于开发的方法,该方法在没有用户身份验证的情况下模拟用户身份。

然后,我们需要运行以下命令来创建personal_access_tokens表:

php artisan migrate
Copier après la connexion
  1. 创建API令牌

Laravel Sanctum为我们提供了两种方式来为API生成令牌。一种是CreateToken方法,该方法可以创建一个或多个包含可选名称和授予权限的API令牌。这里我们介绍第二种方法,即使用hasApiTokens()函数配合createToken()函数:

// use the HasApiTokens trait within your User Model
use LaravelSanctumHasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;

    // ...
}

// create a Token with User ID and given Abilities
$personalAccessToken = $user->createToken('API Token', ['server:get','server:post']);
Copier après la connexion

这里我们在用户模型中使用了HasApiTokensTrait,以便在用户模型中实现API令牌功能。我们使用createToken方法来创建一个API令牌,并在创建令牌时指定了一个可选的名称和授权的权限键。

  1. 保护API路由

有了API密钥,我们就可以将其注入到每个请求中以进行身份验证。我们可以在Laravel的路由文件中使用sanctum中间件来保护API路由,以便验证请求中的令牌:

// A Group of API routes that require a valid Token
Route::group(['middleware' => 'auth:sanctum'], function () {
    Route::get('/user', function (Request $request) {
        return $request->user();
    });
});
Copier après la connexion

在这段代码中,我们定义了一个包含验证sanctum中间件的路由组。 路由组中包含一条路由,该路由仅需要一个有效的Token才能访问。

  1. 使用Bearer令牌

使用Bearer令牌是通过HTTP Authorization头来发送API令牌的最常见方法。可以通过在请求头中加入Authorization: Bearer {{$personalAccessToken->plainTextToken}}来授权令牌:

curl -H "Authorization: Bearer xxxxx" http://example.com/api/user
Copier après la connexion
  1. 撤销API令牌

最后,我们需要了解如何撤销API令牌。我们可以使用tokens()->delete()函数来删除某个用户的所有API令牌,或使用revoke()

$user->tokens()->delete();

$personalAccessToken->revoke();
Copier après la connexion
# 🎜 🎜#De cette manière, l'application Laravel a utilisé les services et fonctions fournis par Sanctum.

    Configurer la base de données

    Ensuite, avant d'effectuer la migration de la base de données, nous devons configurer la table de la base de données de Sanctum. LaravelSanctum fournit par défaut une table de base de données personal_access_tokens qui contient les champs suivants : #🎜🎜#
    #🎜🎜#id : L'identifiant unique du jeton #🎜🎜 ##🎜🎜#tokenable_type : Le nom de classe du modèle associé au token #🎜🎜##🎜🎜#tokenable_id : L'ID du modèle associé au token #🎜 🎜##🎜🎜#name : Le nom du token #🎜🎜##🎜🎜#token : La valeur du token API #🎜🎜## 🎜🎜#capacités : Autorisation de jeton #🎜🎜#
#🎜🎜#Avant de créer la table personal_access_tokens, nous devons d'abord créer la relation modèle. Cela peut être fait en enregistrant ce qui suit dans AuthServiceProvider : #🎜🎜#rrreee#🎜🎜#Sanctum::ignoreMigrations() est utilisé pour empêcher Laravel de migrer dans artisan Exécutez le fichier de migration de la base de données de Sanctum dans la commande. Cependant, dans la plupart des cas, nous l'ajoutons simplement à la commande du fichier de migration de la base de données. Sanctum::actingAs() fournit également une méthode de développement uniquement qui emprunte l'identité d'un utilisateur sans authentification de l'utilisateur. #🎜🎜##🎜🎜# Ensuite, nous devons exécuter la commande suivante pour créer la table personal_access_tokens : #🎜🎜#rrreee
    #🎜🎜#Create API Token# 🎜 🎜##🎜🎜##🎜🎜#Laravel Sanctum nous propose deux façons de générer des jetons pour les API. L'une est la méthode CreateToken, qui crée un ou plusieurs jetons API avec des noms facultatifs et des autorisations accordées. Nous introduisons ici la deuxième méthode, qui consiste à utiliser la fonction hasApiTokens() en conjonction avec la fonction createToken() : #🎜🎜#rrreee#🎜🎜#Ici, nous utilisez-le dans le modèle utilisateur Le trait HasApiTokens est ajouté pour implémenter la fonction de jeton API dans le modèle utilisateur. Nous utilisons la méthode createToken pour créer un jeton API et spécifions un nom facultatif et une clé d'autorisation autorisée lors de la création du jeton. #🎜🎜#
      #🎜🎜#Routage API sécurisé #🎜🎜##🎜🎜##🎜🎜#Avec la clé API, nous pouvons l'injecter dans chaque demande d'authentification. Nous pouvons utiliser le middleware sanctum dans le fichier de routage de Laravel pour protéger la route API afin de vérifier le token dans la requête : #🎜🎜#rrreee#🎜🎜#Dans ce code, nous définissons Un groupe de routage contenant le middleware de validation sanctum. Un groupe de routes contient une route qui ne nécessite qu'un jeton valide pour y accéder. #🎜🎜#
        #🎜🎜#Utiliser le jeton Bearer #🎜🎜##🎜🎜##🎜🎜#Utiliser le jeton Bearer via HTTP Autorisation en-tête pour envoyer un jeton API. Vous pouvez autoriser le jeton en ajoutant Authorization: Bearer {{$personalAccessToken->plainTextToken}} à l'en-tête de la requête : #🎜🎜#rrreee
          #🎜🎜#Revocation Jeton API#🎜🎜##🎜🎜##🎜🎜#Enfin, nous devons comprendre comment révoquer un jeton API. Nous pouvons utiliser la fonction tokens()->delete() pour supprimer tous les jetons API d'un utilisateur, ou utiliser la fonction revoke() pour révoquer un seul jeton API. :#🎜🎜#rrreee#🎜🎜# Conclusion #🎜🎜##🎜🎜# Nous avons désormais implémenté avec succès l'authentification Sanctum pour protéger notre API. Sanctum et Laravel fournissent une authentification API simple mais puissante, qui permet aux développeurs de se concentrer sur la création d'API puissantes et de se concentrer principalement sur la logique métier. Lorsque vous utilisez Sanctum, il est fortement recommandé de lire attentivement la documentation officielle afin de bien comprendre le processus d'authentification de l'API et d'assurer la plus haute sécurité pour votre application. #🎜🎜#

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment obtenir le code de retour lorsque l'envoi par e-mail échoue à Laravel? Comment obtenir le code de retour lorsque l'envoi par e-mail échoue à Laravel? Apr 01, 2025 pm 02:45 PM

Méthode pour obtenir le code de retour lorsque l'envoi par e-mail de Laravel échoue. Lorsque vous utilisez Laravel pour développer des applications, vous rencontrez souvent des situations où vous devez envoyer des codes de vérification. Et en réalité ...

La tâche de calendrier Laravel n'est pas exécutée: que dois-je faire si la tâche n'est pas en cours d'exécution après le calendrier: Exécuter la commande? La tâche de calendrier Laravel n'est pas exécutée: que dois-je faire si la tâche n'est pas en cours d'exécution après le calendrier: Exécuter la commande? Mar 31, 2025 pm 11:24 PM

Laravel Schedule Tâche d'exécution de dépannage non réactif Lorsque vous utilisez la planification des tâches de calendrier de Laravel, de nombreux développeurs rencontreront ce problème: Schedule: Exécuter ...

Dans Laravel, comment gérer la situation où les codes de vérification ne sont pas envoyés par e-mail? Dans Laravel, comment gérer la situation où les codes de vérification ne sont pas envoyés par e-mail? Mar 31, 2025 pm 11:48 PM

La méthode de traitement de l'échec de l'e-mail de Laravel à envoyer le code de vérification est d'utiliser Laravel ...

Comment implémenter la fonction de table personnalisée de clic pour ajouter des données dans l'administrateur DCAT? Comment implémenter la fonction de table personnalisée de clic pour ajouter des données dans l'administrateur DCAT? Apr 01, 2025 am 07:09 AM

Comment implémenter la fonction du tableau de Cliquez sur personnalisé pour ajouter des données dans DCATADMIN (Laravel-Admin) lors de l'utilisation de DCAT ...

Partage de connexion Laravel Redis: pourquoi la méthode de sélection affecte-t-elle d'autres connexions? Partage de connexion Laravel Redis: pourquoi la méthode de sélection affecte-t-elle d'autres connexions? Apr 01, 2025 am 07:45 AM

L'impact du partage des connexions redis dans Laravel Framework et sélectionnez Méthodes Lors de l'utilisation de Laravel Framework et Redis, les développeurs peuvent rencontrer un problème: grâce à la configuration ...

Laravel Multi-Lenant Extension Stancl / Tenancy: Comment personnaliser l'adresse hôte d'une connexion de base de données de locataire? Laravel Multi-Lenant Extension Stancl / Tenancy: Comment personnaliser l'adresse hôte d'une connexion de base de données de locataire? Apr 01, 2025 am 09:09 AM

Connexion de la base de données des locataires personnalisés dans le package d'extension multi-locataire Laravel Stancl / location Lors de la construction d'applications multi-locataires à l'aide du package d'extension multi-locataire Laravel Stancl / location, ...

Laravel Eloquent Orm dans Bangla Partial Model Search) Laravel Eloquent Orm dans Bangla Partial Model Search) Apr 08, 2025 pm 02:06 PM

Laravelelognent Model Retrieval: Faconttement l'obtention de données de base de données Eloquentorm fournit un moyen concis et facile à comprendre pour faire fonctionner la base de données. Cet article présentera en détail diverses techniques de recherche de modèles éloquentes pour vous aider à obtenir efficacement les données de la base de données. 1. Obtenez tous les enregistrements. Utilisez la méthode All () pour obtenir tous les enregistrements dans la table de base de données: usApp \ Modèles \ Post; $ poters = post :: all (); Cela rendra une collection. Vous pouvez accéder aux données à l'aide de Foreach Loop ou d'autres méthodes de collecte: ForEach ($ PostsAs $ POST) {echo $ post->

Géospatial de Laravel: optimisation des cartes interactives et de grandes quantités de données Géospatial de Laravel: optimisation des cartes interactives et de grandes quantités de données Apr 08, 2025 pm 12:24 PM

Traiter efficacement 7 millions d'enregistrements et créer des cartes interactives avec la technologie géospatiale. Cet article explore comment traiter efficacement plus de 7 millions d'enregistrements en utilisant Laravel et MySQL et les convertir en visualisations de cartes interactives. Exigences initiales du projet de défi: extraire des informations précieuses en utilisant 7 millions d'enregistrements dans la base de données MySQL. Beaucoup de gens considèrent d'abord les langages de programmation, mais ignorent la base de données elle-même: peut-il répondre aux besoins? La migration des données ou l'ajustement structurel est-il requis? MySQL peut-il résister à une charge de données aussi importante? Analyse préliminaire: les filtres et les propriétés clés doivent être identifiés. Après analyse, il a été constaté que seuls quelques attributs étaient liés à la solution. Nous avons vérifié la faisabilité du filtre et établi certaines restrictions pour optimiser la recherche. Recherche de cartes basée sur la ville

See all articles