Gérer l'authentification API avec Laravel Passport
Apr 03, 2024 pm 01:50 PML'éditeur de PHP vous fera découvrir l'utilisation de Laravel Passport pour gérer l'authentification API. Laravel Passport est une implémentation complète du serveur OAuth2 qui peut aider les développeurs à mettre en ?uvre facilement l'authentification API et fournit de nombreuses fonctions pratiques. A travers cet article, vous apprendrez à utiliser Laravel Passport pour gérer l'authentification des utilisateurs API et assurer la sécurité de l'interface API.
étape 1. Installez Laravel
Nous devons utiliser la commande suivante pour créer une dernière application Laravel, veuillez donc ouvrir le terminal et exécuter?:
laravel new auth
étape 2. Installer le package Laravel Passport
Laravel Passport peut être utilisé dans un quelques minutes Votre application implémente un serveur OAuth2 complet.
composer require laravel/passport
étape 3. Exécutez DatabaseMigration
La migration de passeport créera les tables utilisées par votre application pour stocker les clients et les jetons d'accès.
PHP artisan migrate
étape 4. Générer une clé secrète
Cette commande créera une clé secrète pour générer un jeton d'accès sécurisé. De plus, il créera également un accès personnel et un passGrantWord utilisé pour générer le jeton d'accès?:
php artisan passport:install
Après l'exécution, ajoutez LaravelPassportHasApiTokens
trLaravelPassportHasApiTokens
trait 添加到你的 AppUser
模型中。這個 trait 會為模型添加一系列助手函數(shù)用來驗證用戶的秘鑰和作用域:
第五步 . Passport 配置
<?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; use Laravel\Passport\HasApiTokens; class User extends Authenticatable { use Notifiable, HasApiTokens; }
接下來,你應(yīng)該在 AuthServiceProvider
中的 boot
方法中調(diào)用 Passport::routes
方法。這個方法會注冊必要的路由去頒發(fā)訪問令牌,撤銷訪問令牌,客戶端和個人令牌:
<?php namespace App\Providers; use Laravel\Passport\Passport; use Illuminate\Support\Facades\Gate; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider { protected $policies = [ 'App\Model' => 'App\Policies\ModelPolicy', ]; public function boot() { $this->reGISterPolicies(); Passport::routes(); } }
最后,在 config/auth.php
配置文件中,你應(yīng)該設(shè)置 api
權(quán)限認證守衛(wèi)的 driver
選項為 passport
。當需要權(quán)限認證的 API 請求進來時會告訴你的應(yīng)用去使用 Passport's 的 TokenGuard
。
'guards' => [ 'WEB' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
第六步. 添加 API 路由
Laravel 提供了 routes/api.php
文件來給我們編寫 web 路由,因此在這個文件添加新的路由即可。
<?php use Illuminate\Http\Request; Route::group([ 'prefix' => 'auth' ], function () { Route::post('login', 'AuthController@login'); Route::post('signup', 'AuthController@signup'); Route::group([ 'middleware' => 'auth:api' ], function() { Route::get('loGout', 'AuthController@logout'); Route::get('user', 'AuthController@user'); }); });
第七步: 創(chuàng)建控制器
最后一步我們必須創(chuàng)建新的控制器和 api 方法。因此我們先創(chuàng)建 AuthController
ai
Modèle AppUser
. Ce trait ajoutera une série de fonctions d'assistance au modèle pour vérifier la clé secrète et la portée de l'utilisateur?: Ensuite, vous devezétape 5. Configuration du passeport
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Carbon\Carbon; use App\User; class AuthController extends Controller { public function signup(Request $request) { $request->validate([ 'name' => 'required|string', 'email' => 'required|string|email|unique:users', 'password' => 'required|string|confirmed' ]); $user = new User([ 'name' => $request->name, 'email' => $request->email, 'password' => bcrypt($request->password) ]); $user->save(); return response()->JSON([ 'message' => 'Successfully created user!' ], 201); } public function login(Request $request) { $request->validate([ 'email' => 'required|string|email', 'password' => 'required|string', 'remember_me' => 'boolean' ]); $credentials = request(['email', 'password']); if(!Auth::attempt($credentials)) return response()->json([ 'message' => 'Unauthorized' ], 401); $user = $request->user(); $tokenResult = $user->createToken('Personal Access Token'); $token = $tokenResult->token; if ($request->remember_me) $token->expires_at = Carbon::now()->addWeeks(1); $token->save(); return response()->json([ 'access_token' => $tokenResult->accessToken, 'token_type' => 'Bearer', 'expires_at' => Carbon::parse( $tokenResult->token->expires_at )->toDateTimeString() ]); } public function logout(Request $request) { $request->user()->token()->revoke(); return response()->json([ 'message' => 'Successfully logged out' ]); } public function user(Request $request) { return response()->json($request->user()); } }
dans <code>AuthServiceProvider
Le Passport::routes
est appelée dans la méthode >boot. Cette méthode enregistrera les routes nécessaires pour émettre des jetons d'accès, révoquer les jetons d'accès, les jetons client et personnels?: php artisan serve
Enfin, dans le fichier de configuration config/auth.php
, vous devez définir le L'option du pilote
du garde d'authentification des autorisations api
est passport
. Lorsqu'une requête API nécessitant une authentification par autorisation arrive, votre application sera invitée à utiliser le TokenGuard
de Passport. Content-Type: application/json
X-Requested-With: XMLHttpRequest
étape 6. Ajouter une route APILaravel fournit le fichier routes/api.php
pour que nous puissions écrire des routes Web, il suffit donc d'ajouter une nouvelle route dans ce fichier. rrreeeétape 7?: Créer un contr?leur
Dans la dernière étape, nous devons créer de nouvelles méthodes de contr?leur et d'API. Nous créons donc d'abord AuthController
et y mettons le code?: rrreee
Maintenant, nous sommes prêts à exécuter notre exemple, exécutez la commande suivante pour l'exécuter rapidement?:
rrreee
Test
Désormais, nous pouvons utiliser le client REST tools
pour simplifier les tests, comme Postman. J'ai exécuté le test et vous pouvez voir la capture d'écran ci-dessous. 
Vous devez définir les deux informations d'en-tête suivantes pour cette API?: rrreee
Register

Connexion
Déconnexion
-
Utilisation r
??Merci à lire ! ??????Ressources????????GitHub????????Collections Postman??????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!
routes/api.php
pour que nous puissions écrire des routes Web, il suffit donc d'ajouter une nouvelle route dans ce fichier. rrreeeétape 7?: Créer un contr?leurAuthController
et y mettons le code?: rrreee






Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

typedef struct est utilisé en langage C pour créer des alias de type de structure afin de simplifier l'utilisation des structures. Il crée un alias pour un nouveau type de données sur une structure existante en spécifiant l'alias de la structure. Les avantages incluent une lisibilité améliorée, la réutilisation du code et la vérification du type. Remarque : La structure doit être définie avant d'utiliser un alias. L'alias doit être unique dans le programme et valide uniquement dans le périmètre dans lequel il est déclaré.

Les avantages des fermetures JavaScript incluent le maintien d'une portée variable, l'activation du code modulaire, l'exécution différée et la gestion des événements ; les inconvénients incluent les fuites de mémoire, la complexité accrue, la surcharge de performances et les effets de cha?ne de portée.

La directive de préprocesseur #include en C++ insère le contenu d'un fichier source externe dans le fichier source actuel, en copiant son contenu à l'emplacement correspondant dans le fichier source actuel. Principalement utilisé pour inclure des fichiers d'en-tête contenant les déclarations nécessaires dans le code, telles que #include <iostream> pour inclure des fonctions d'entrée/sortie standard.

Cycle de vie des pointeurs intelligents C++ : Création : Les pointeurs intelligents sont créés lors de l'allocation de mémoire. Transfert de propriété?: Transférer la propriété via une opération de déménagement. Libération?: la mémoire est libérée lorsqu'un pointeur intelligent sort de la portée ou est explicitement libéré. Destruction d'objet?: lorsque l'objet pointé est détruit, le pointeur intelligent devient un pointeur invalide.

Les pointeurs intelligents sont des pointeurs spécifiques au C++ qui peuvent automatiquement libérer des objets de mémoire tas et éviter les erreurs de mémoire. Les types incluent?: unique_ptr?: propriété exclusive, pointant vers un seul objet. shared_ptr : propriété partagée, permettant à plusieurs pointeurs de gérer des objets en même temps. faible_ptr?: référence faible, n'augmente pas le nombre de références et évite les références circulaires. Utilisation?: utilisez make_unique, make_shared et make_weak de l'espace de noms std pour créer des pointeurs intelligents. Les pointeurs intelligents libèrent automatiquement la mémoire des objets à la fin de la portée. Utilisation avancée?: vous pouvez utiliser des suppresseurs personnalisés pour contr?ler la manière dont les objets sont libérés. Les pointeurs intelligents peuvent gérer efficacement les tableaux dynamiques et empêcher les fuites de mémoire.

La définition du nom de fonction du langage C comprend: Type de valeur de retour, nom de fonction, liste de paramètres et corps de fonction. Les noms de fonction doivent être clairs, concis et unifiés dans le style pour éviter les conflits avec les mots clés. Les noms de fonction ont des lunettes et peuvent être utilisés après la déclaration. Les pointeurs de fonction permettent de passer des fonctions ou d'attribuer des arguments. Les erreurs communes incluent les conflits de dénomination, l'inadéquation des types de paramètres et les fonctions non déclarées. L'optimisation des performances se concentre sur la conception et la mise en ?uvre des fonctions, tandis que le code clair et facile à lire est crucial.

Une fuite de mémoire PHP se produit lorsqu'une application alloue de la mémoire et ne parvient pas à la libérer, ce qui entra?ne une réduction de la mémoire disponible du serveur et une dégradation des performances. Les causes incluent les références circulaires, les variables globales, les variables statiques et l'expansion. Les méthodes de détection incluent Xdebug, Valgrind et PHPUnitMockObjects. Les étapes de résolution sont les suivantes?: identifier la source de la fuite, réparer la fuite, tester et surveiller. Des exemples pratiques illustrent les fuites de mémoire causées par des références circulaires et des méthodes spécifiques pour résoudre le problème en cassant les références circulaires via des destructeurs.

La méthode pour résoudre le problème de fermeture du curseur Oracle comprend: la fermeture explicite du curseur à l'aide de l'instruction Close. Déclarez le curseur dans la clause de mise à jour pour la fermeture automatiquement après la fin de la portée. Déclarez le curseur dans la clause d'utilisation afin qu'il se ferme automatiquement lorsque la variable PL / SQL associée est fermée. Utilisez la gestion des exceptions pour vous assurer que le curseur est fermé dans toute situation d'exception. Utilisez le pool de connexion pour fermer automatiquement le curseur. Désactiver la soumission automatique et le délai de fermeture du curseur.
