Maison > développement back-end > tutoriel php > Gérer l'authentification API avec Laravel Passport

Gérer l'authentification API avec Laravel Passport

PHPz
Libérer: 2024-04-03 13:52:01
avant
1170 Les gens l'ont consulté

使用 Laravel Passport 处理 API 认证

L'é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
Copier après la connexion

É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
Copier après la connexion

É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
Copier après la connexion

É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
Copier après la connexion

Après l'exécution, ajoutez LaravelPassportHasApiTokens trLaravelPassportHasApiTokens trait 添加到你的 AppUser 模型中。这个 trait 会为模型添加一系列助手函数用来验证用户的秘钥和作用域:

第五步 . 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;
}
Copier après la connexion

接下来,你应该在 AuthServiceProvider 中的 boot 方法中调用 Passport::routes 方法。这个方法会注册必要的路由去颁发访问令牌,撤销访问令牌,客户端和个人令牌:

<?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 = [
        &#39;App\Model&#39; => &#39;App\Policies\ModelPolicy&#39;,
    ];

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

        Passport::routes();
    }
}
Copier après la connexion

最后,在 config/auth.php 配置文件中,你应该设置 api 权限认证守卫的 driver 选项为 passport。当需要权限认证的 API 请求进来时会告诉你的应用去使用 Passport's 的 TokenGuard

&#39;guards&#39; => [
    &#39;WEB&#39; => [
        &#39;driver&#39; => &#39;session&#39;,
        &#39;provider&#39; => &#39;users&#39;,
    ],
    &#39;api&#39; => [
        &#39;driver&#39; => &#39;passport&#39;,
        &#39;provider&#39; => &#39;users&#39;,
    ],
],
Copier après la connexion

第六步. 添加 API 路由

Laravel 提供了 routes/api.php 文件来给我们编写 web 路由,因此在这个文件添加新的路由即可。

<?php

use Illuminate\Http\Request;

Route::group([
    &#39;prefix&#39; => &#39;auth&#39;
], function () {
    Route::post(&#39;login&#39;, &#39;AuthController@login&#39;);
    Route::post(&#39;signup&#39;, &#39;AuthController@signup&#39;);

    Route::group([
      &#39;middleware&#39; => &#39;auth:api&#39;
    ], function() {
        Route::get(&#39;loGout&#39;, &#39;AuthController@logout&#39;);
        Route::get(&#39;user&#39;, &#39;AuthController@user&#39;);
    });
});
Copier après la connexion

第七步: 创建控制器

最后一步我们必须创建新的控制器和 api 方法。因此我们先创建 AuthControllerai

t dans votre 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 :

É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([
            &#39;name&#39; => &#39;required|string&#39;,
            &#39;email&#39; => &#39;required|string|email|unique:users&#39;,
            &#39;password&#39; => &#39;required|string|confirmed&#39;
        ]);

        $user = new User([
            &#39;name&#39; => $request->name,
            &#39;email&#39; => $request->email,
            &#39;password&#39; => bcrypt($request->password)
        ]);

        $user->save();

        return response()->JSON([
            &#39;message&#39; => &#39;Successfully created user!&#39;
        ], 201);
    }

    
    public function login(Request $request)
    {
        $request->validate([
            &#39;email&#39; => &#39;required|string|email&#39;,
            &#39;password&#39; => &#39;required|string&#39;,
            &#39;remember_me&#39; => &#39;boolean&#39;
        ]);

        $credentials = request([&#39;email&#39;, &#39;password&#39;]);

        if(!Auth::attempt($credentials))
            return response()->json([
                &#39;message&#39; => &#39;Unauthorized&#39;
            ], 401);

        $user = $request->user();

        $tokenResult = $user->createToken(&#39;Personal Access Token&#39;);
        $token = $tokenResult->token;

        if ($request->remember_me)
            $token->expires_at = Carbon::now()->addWeeks(1);

        $token->save();

        return response()->json([
            &#39;access_token&#39; => $tokenResult->accessToken,
            &#39;token_type&#39; => &#39;Bearer&#39;,
            &#39;expires_at&#39; => Carbon::parse(
                $tokenResult->token->expires_at
            )->toDateTimeString()
        ]);
    }

    
    public function logout(Request $request)
    {
        $request->user()->token()->revoke();

        return response()->json([
            &#39;message&#39; => &#39;Successfully logged out&#39;
        ]);
    }

    
    public function user(Request $request)
    {
        return response()->json($request->user());
    }
}
Copier après la connexion
Ensuite, vous devez 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
Copier après la connexion

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
Copier après la connexion
Étape 6. Ajouter une route API

Laravel 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 :

使用 Laravel Passport 处理 API 认证rrreee

Test

使用 Laravel Passport 处理 API 认证

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.

使用 Laravel Passport 处理 API 认证

Vous devez définir les deux informations d'en-tête suivantes pour cette API :

rrreee

使用 Laravel Passport 处理 API 认证

Register

使用 Laravel Passport 处理 API 认证


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!

Étiquettes associées:
source:lsjlt.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal