recherche
Maisondéveloppement back-endtutoriel phpComment répondre aux exigences d'autorisation dans les scénarios API ?

Comment répondre aux exigences d'autorisation dans les scénarios API ?

Jun 23, 2017 am 11:46 AM
apilaravelCréer un site Web系统认证

Introduction

Dans Laravel, il est très simple d'implémenter la connexion et l'autorisation basées sur des formulaires traditionnels, mais comment répondre aux exigences d'autorisation dans les scénarios API ? Dans les scénarios d'API, l'autorisation des utilisateurs est généralement implémentée via des jetons au lieu de maintenir l'état de session entre les requêtes. Passport peut désormais être utilisé pour implémenter facilement le processus d'autorisation API dans les projets Laravel. Avec Passport, vous pouvez ajouter une implémentation complète du serveur OAuth2 à votre application en quelques minutes.


Installation

Utilisez le gestionnaire de packages de dépendances Composer pour installer Passport :

 composer require laravel/passport

Ensuite, enregistrez le fournisseur de services Passport dans le tableau fournisseurs du fichier de configuration config/app.php :

Laravel\Passport\PassportServiceProvider::class

Passport utilise des fournisseurs de services pour enregistrer le répertoire du script de migration de base de données interne, donc une fois l'étape précédente terminée, vous devez pour mettre à jour la structure de votre base de données. Le script de migration de Passport créera automatiquement la table de données client et la table de données de jeton requises par l'application :

php artisan migrate

Ensuite, vous devez exécuter la commande passeport:install pour créer la sécurité générée. La clé de cryptage utilisée pour le jeton d'accès. En même temps, cette commande créera également le client « Accès privé » et le client « Autorisation par mot de passe » :

php artisan passport:install

Ce qui précède. commande Après exécution, modifiez AppUser.php pour vérifier le jeton et la portée d'utilisation de l'utilisateur authentifié :

<?php namespace App;use Laravel\Passport\HasApiTokens; // 新增use Illuminate\Notifications\Notifiable;use Illuminate\Foundation\Auth\User as Authenticatable;class User extends Authenticatable
{use HasApiTokens, Notifiable; // 增加 HasApiTokens

Ensuite, vous devez appeler Passport dans la méthode de démarrage d'AuthServiceProvider : fonction routes . Cette fonction enregistrera certaines routes nécessaires qui seront utilisées dans le processus d'émission et de révocation des jetons d'accès, des clients et des jetons d'accès privés :

Modifier AppProvidersAuthServiceProvider.php :

<?php namespace App\Providers;use Laravel\Passport\Passport; // 新增use Illuminate\Support\Facades\Gate;use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;use Carbon\Carbon; // 新增引用class AuthServiceProvider extends ServiceProvider
{/**
     * The policy mappings for the application.
     *
     * @var array     */protected $policies = [&#39;App\Model&#39; => 'App\Policies\ModelPolicy',];/**
     * Register any authentication / authorization services.
     *
     * @return void     */public function boot()
    {$this->registerPolicies();

        Passport::routes(); // 注册passport路由

        //令牌的有效期Passport::tokensExpireIn(Carbon::now()->addDays(15));

        Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
    }
}

Enfin, vous devez modifier l'élément de protection d'autorisation (pilote) dans la partie api du fichier de configuration config/auth.php en passeport. Cet ajustement fera que votre application utilisera TokenGuard de Passport lors de la réception des demandes d'autorisation de l'API :

'guards' => ['web' => ['driver' => 'session',
        'provider' => 'users',],

    'api' => ['driver' => 'passport', // 改为passport'provider' => 'users',],],

Test

api La route est api.php . Ouvrez routesapi.php et ajoutez des routes de test.

Route::group(['namespace' => 'api'], function () {
    Route::post('/login', 'UserController@login');
});

Route::group(['middleware' => 'auth:api', 'namespace' => 'api'], function() {
    Route::get('details', 'UserController@details');
});

L'un est utilisé pour se connecter et obtenir le jeton, et l'autre est utilisé pour terminer la vérification de connexion avec le jeton obtenu et obtenir les informations utilisateur actuelles.

Le routage des détails utilise le middleware auth:api pour vérifier le jeton.

Créez un dossier api dans le répertoire AppHttp et ajoutez UserController.php

<?php namespace App\Http\Controllers\api;use Illuminate\Http\Request;use App\Http\Controllers\Controller;use Illuminate\Support\Facades\Auth;use App\User;use Response;class UserController extends Controller
{public function __construct()
    {$this->content = array();
    }public function login()
    {if(Auth::attempt(['email' => request('email'), 'password' => request('password')]))
        {$user = Auth::user();$this->content['token'] =  $user->createToken('Pizza App')->accessToken;$status = 200;
        } else {$this->content['error'] = "未授权";             $status = 401;
        }         return response()->json($this->content, $status);    
    }public function details()
    {return response()->json(['user' => Auth::user()]);
    }
}

Test dans postman :

Comme le montre l'image ci-dessus, la méthode de connexion doit correspondre à l'itinéraire, utiliser la méthode de publication et transmettre l'e-mail et le mot de passe de l'utilisateur à api/login dans un formulaire

Si réussi correctement, vous obtiendrez le jeton dans l'image ci-dessus

Ajoutez le jeton obtenu à l'étape précédente à l'en-tête, et ajoutez ' Porteur devant le jeton'. Ensuite, vous pouvez obtenir les informations de l'utilisateur actuel. Autrement dit, l'authentification de l'utilisateur est terminée.

Il n'est pas garanti que ce qui précède soit entièrement correct. Bienvenue pour voir mon code GitHub.

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
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
Expliquez comment l'équilibrage de charge affecte la gestion des sessions et comment y remédier.Expliquez comment l'équilibrage de charge affecte la gestion des sessions et comment y remédier.Apr 29, 2025 am 12:42 AM

L'équilibrage de charge affecte la gestion de la session, mais peut être résolu avec la réplication de la session, l'adhérence des sessions et le stockage centralisé de session. 1. Session Replication Copy Données de session entre les serveurs. 2. Session Stickleness dirige les demandes d'utilisateurs vers le même serveur. 3. Le stockage centralisé de session utilise des serveurs indépendants tels que Redis pour stocker les données de session pour assurer le partage de données.

Expliquez le concept de verrouillage des sessions.Expliquez le concept de verrouillage des sessions.Apr 29, 2025 am 12:39 AM

Session BlockingSateChnique utilisétoenSureAuser'sessionremainSexclusiVetoonUseratatime.ITCUCIALFORPREVERSDATACORUPRUPTIONANDSECRYSEURCHEBRESSInMulti-userApplications.SessionLockingisImplementEdUsingServer-SidelockingMechanisms, telasreentrantLockinjj

Y a-t-il des alternatives aux séances PHP?Y a-t-il des alternatives aux séances PHP?Apr 29, 2025 am 12:36 AM

Les alternatives aux séances PHP comprennent des cookies, une authentification basée sur des jetons, des sessions basées sur la base de données et Redis / Memcached. 1.CooKies Gérer les sessions en stockant des données sur le client, ce qui est simple mais faible en sécurité. 2. L'authentification basée sur le token utilise des jetons pour vérifier les utilisateurs, ce qui est hautement sécurisé mais nécessite une logique supplémentaire. 3.Database basée sur les séances stocke les données dans la base de données, qui a une bonne évolutivité mais peut affecter les performances. 4. redis / memcached utilise un cache distribué pour améliorer les performances et l'évolutivité, mais nécessite une correspondance supplémentaire

Définissez le terme «détournement de session» dans le contexte de PHP.Définissez le terme «détournement de session» dans le contexte de PHP.Apr 29, 2025 am 12:33 AM

SessionHijacking fait référence à un attaquant imitant un utilisateur en obtenant le SessionID de l'utilisateur. Les méthodes de prévention comprennent: 1) le chiffrement de la communication à l'aide de HTTPS; 2) Vérification de la source du sessionID; 3) Utilisation d'un algorithme de génération de sessionID sécurisé; 4) Mise à jour régulière du SessionID.

Quelle est la forme complète de PHP?Quelle est la forme complète de PHP?Apr 28, 2025 pm 04:58 PM

L'article traite de PHP, détaillant sa forme complète, les principales utilisations du développement Web, la comparaison avec Python et Java, et sa facilité d'apprentissage pour les débutants.

Comment PHP gère-t-il les données de formulaire?Comment PHP gère-t-il les données de formulaire?Apr 28, 2025 pm 04:57 PM

PHP gère les données de formulaire à l'aide de $ \ _ Post et $ \ _ obtiennent des superglobaux, avec la sécurité assurée par la validation, la désinfection et les interactions de base de données sécurisées.

Quelle est la différence entre PHP et ASP.NET?Quelle est la différence entre PHP et ASP.NET?Apr 28, 2025 pm 04:56 PM

L'article compare PHP et ASP.NET, en se concentrant sur leur pertinence pour les applications Web à grande échelle, les différences de performances et les fonctionnalités de sécurité. Les deux sont viables pour les grands projets, mais PHP est open-source et indépendant de la plate-forme, tandis que ASP.NET,

PHP est-il un langage sensible à la cas?PHP est-il un langage sensible à la cas?Apr 28, 2025 pm 04:55 PM

La sensibilité à la caisse de PHP varie: les fonctions sont insensibles, tandis que les variables et les classes sont sensibles. Les meilleures pratiques incluent la dénomination cohérente et l'utilisation de fonctions insensibles à des cas pour les comparaisons.

See all articles

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

SublimeText3 Linux nouvelle version

SublimeText3 Linux nouvelle version

Dernière version de SublimeText3 Linux

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft

Navigateur d'examen sécurisé

Navigateur d'examen sécurisé

Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel