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

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

PHPz
Libérer: 2023-06-13 17:34:38
original
1693 Les gens l'ont consulté

Laravel est un framework d'application Web PHP open source conçu pour aider les développeurs à créer facilement des applications Web efficaces. Laravel Passport fait partie du framework Laravel. Il s'agit d'un serveur d'authentification qui implémente le protocole OAuth2 et fournit un support puissant pour le développement d'API. Dans cet article, nous expliquerons comment implémenter l'authentification API à l'aide de Laravel Passport.

  1. Installer Laravel Passport

Avant d'utiliser Laravel Passport, nous devons d'abord l'installer. Laravel Passport peut être installé en exécutant la commande suivante :

composer require laravel/passport
Copier après la connexion

Une fois l'installation terminée, vous devez également exécuter la commande php artisan migrate pour créer les tables de données requises. php artisan migrate命令来创建所需的数据表。

  1. 配置认证中间件

要使用Laravel Passport进行API身份验证,我们需要将其与Laravel的认证中间件结合使用。可以在app/Http/Kernel.php文件中为API组添加相应的认证中间件:

protected $middlewareGroups = [
    'api' => [
        'throttle:60,1',
        IlluminateRoutingMiddlewareSubstituteBindings::class,
        LaravelPassportHttpMiddlewareCreateFreshApiToken::class,
    ],
];
Copier après la connexion

其中,CreateFreshApiToken中间件将在每个请求中检查API令牌,并在需要时自动刷新该令牌。

  1. 创建API认证路由

接下来,我们需要为API创建相应的认证路由。可以在routes/api.php文件中添加以下路由:

Route::post('login', 'APIAuthController@login');
Route::post('register', 'APIAuthController@register');

Route::group(['middleware' => ['auth:api']], function() {
    Route::get('details', 'APIAuthController@details');
    // 添加更多需要登录才能访问的API路由
});
Copier après la connexion

在上面的代码中,auth:api中间件将确保只有已经通过身份验证的用户才能访问这些路由。AuthController是我们稍后将创建的控制器,其中包含处理身份验证和API路由的逻辑。

  1. 创建API认证控制器

现在,我们需要创建处理API身份验证和路由的控制器。可以使用以下命令创建AuthController

php artisan make:controller API/AuthController
Copier après la connexion

AuthController中应该包含以下方法:

use IlluminateHttpRequest;
use IlluminateSupportFacadesAuth;
use IlluminateSupportFacadesValidator;
use AppUser;

class AuthController extends Controller
{
    /**
     * 用户注册
     *
     * @param  IlluminateHttpRequest  $request
     * @return IlluminateHttpResponse
     */
    public function register(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|unique:users',
            'password' => 'required|string|min:6',
        ]);

        if ($validator->fails()){
            return response(['errors'=>$validator->errors()->all()], 400);
        }

        $request['password'] = bcrypt($request['password']);
        $user = User::create($request->toArray());
        $token = $user->createToken('MyApp')->accessToken;
        return response(['token' => $token], 200);
    }

    /**
     * 用户登录
     *
     * @param  IlluminateHttpRequest  $request
     * @return IlluminateHttpResponse
     */
    public function login(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'email' => 'required|string|email',
            'password' => 'required|string',
        ]);

        if ($validator->fails()) {
            return response(['errors'=>$validator->errors()->all()], 400);
        }

        if (!Auth::attempt(['email' => $request['email'], 'password' => $request['password']])) {
            return response(['message' => 'Invalid login credentials'], 400);
        }

        $user = $request->user();
        $token = $user->createToken('MyApp')->accessToken;
        return response(['token' => $token], 200);
    }

    /**
     * 获取用户详细信息
     *
     * @param  IlluminateHttpRequest  $request
     * @return IlluminateHttpResponse
     */
    public function details(Request $request)
    {
        return response()->json(['user' => $request->user()], 200);
    }
}
Copier après la connexion

register()方法用于用户注册,login()方法用于用户登录,details()方法用于获取已登录用户的详细信息。需要注意的是,register()login()方法将为已经通过验证的用户创建新的API令牌,并将其返回给客户端。

  1. 测试API身份验证

现在,我们可以通过发送用户名和密码来测试API身份验证。可以使用Postman或curl等工具执行以下命令:

curl -X POST 
  http://your-app-url/api/login 
  -H 'content-type: application/json' 
  -d '{
    "email": "user@example.com",
    "password": "password"
}'
Copier après la connexion

如果用户名和密码是正确的,将收到包含API令牌的响应:

{
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImU4YmI2Njk0MGEyNmIzY2Q2ZmY4M2Q3MjQ5ZjgzODE1MTI2ZmRkMDIyM2YyMzVmOGZmNjhlOWM5NGU2Mzk4ZTU3ZWZiMDJhNmQyZmRlZjA2In0.eyJhdWQiOiIxIiwianRpIjoiZThiYjY2OTAwZTI2YjNjZDZmZjgzZDcyNDlmODM4MTUxMjZmZGQwMjIzZjIzNWY4ZmY2OGU5Yzk0ZTYzOThlNTdlZmIwMmE2ZDJmZGVmMDYiLCJpYXQiOjE2Mjg5NDM3NzQsIm5iZiI6MTYyODk0Mzc3NCwiZXhwIjoxNjMxMDQ5Nzc0LCJzdWIiOiIxIiwic2NvcGVzIjpbXX0.toR762TgsNDarQZs6azl-jg-tP2996vzUc-LOQB90Twcb0Y3BC5vrd3jDW70QQw961MwV_sFrU1dhyKLMN76lG6B03zv6GjU6tLHyrqQi88t0clSrVupAcaQHOAB0gGLBRAOc5Ql1z9CHXx8f_FkA3RVC4htHNTk_r0mM-szWcf1sRONQYaARPDFl7ZJwj1_wYB7M6dcpiEDDhpyzmRFPv7pYyX8805BL4yg6z-Kmxc-DW4GSS4NTBxnctwGPf9w8fYc2zJGHXmT6OtqVjuqKDdFQgxIQhEkeSldBZmzTIPIR_tTa8Ub3Cxlx69zAfJTHosXwPYQOO03LBJwNVdjeLIkKgQK1PcAXD2kN4-RuyTEMXYNQ0wRGaHIb3vxwqVdjrrVE9yrDMIpAPRgzFwzXbJWvKmxzZpFTUz9RvIqUFt2zNbIG5kLOUyvmKIqO-aTISCT0wu0T0ZEq-DpXJ7-C6z-M0cJJP37y7eV4jdAMx7yD9jT85Knv4_hjLyKvF4We5DSSOYjeIVoq3XHNJdmYJ7X3ph6Ko1CfdtVKNVf20Vx8Z_Zi-pe9bTY0n-tSkwDvVXpVOrb3BOalq7MbOpTe8Klf9uZ_ZIDqTlTnrYV_oh_5isrImv7r8D1NX1G4p9jRcI16MEFDE"
}
Copier après la connexion

然后,可以使用另一个命令来访问需要身份验证的路由:

curl -X GET 
  http://your-app-url/api/details 
  -H 'authorization: Bearer <token>'
Copier après la connexion

在上面的命令中,将<token>

    Configuration du middleware d'authentification
    1. Pour utiliser Laravel Passport pour l'authentification API, nous devons l'utiliser conjointement avec le middleware d'authentification de Laravel. Vous pouvez ajouter le middleware d'authentification correspondant pour le groupe API dans le fichier app/Http/Kernel.php :
    {
        "user": {
            "id": 1,
            "name": "User",
            "email": "user@example.com",
            "email_verified_at": null,
            "created_at": "2021-08-13T02:58:04.000000Z",
            "updated_at": "2021-08-13T02:58:04.000000Z"
        }
    }
    Copier après la connexion

    Parmi eux, le middleware CreateFreshApiToken sera vérifié dans chaque demandez un jeton API et actualisez automatiquement le jeton en cas de besoin.

      🎜Créer une route d'authentification API🎜🎜🎜Ensuite, nous devons créer la route d'authentification correspondante pour l'API. Les routes suivantes peuvent être ajoutées dans le fichier routes/api.php : 🎜rrreee🎜 Dans le code ci-dessus, le middleware auth:api garantira que seuls les utilisateurs authentifiés pourront accéder ces itinéraires. AuthController est le contrôleur que nous créerons plus tard et contient la logique pour gérer l'authentification et le routage API. 🎜
        🎜 Créer un contrôleur d'authentification API 🎜🎜🎜Maintenant, nous devons créer le contrôleur qui gère l'authentification et le routage API. AuthController peut être créé à l'aide de la commande suivante : 🎜rrreee🎜AuthController doit contenir les méthodes suivantes : 🎜rrreee🎜La méthode register() est utilisée pour enregistrement de l'utilisateur, la méthode login() est utilisée pour se connecter et la méthode details() est utilisée pour obtenir les informations détaillées de l'utilisateur connecté. Il convient de noter que les méthodes register() et login() créeront un nouveau jeton API pour l'utilisateur authentifié et le renverront au client. 🎜
          🎜Test de l'authentification API 🎜🎜🎜Nous pouvons désormais tester l'authentification API en envoyant un nom d'utilisateur et un mot de passe. La commande suivante peut être exécutée à l'aide d'un outil comme Postman ou curl : 🎜rrreee🎜 Si le nom d'utilisateur et le mot de passe sont corrects, une réponse contenant le jeton API sera reçue : 🎜rrreee🎜 Une autre commande peut alors être utilisée pour accéder aux routes qui nécessitent une authentification : 🎜rrreee🎜Dans la commande ci-dessus, remplacez <token> par le jeton API obtenu à l'étape précédente. Si le jeton est valide, vous obtiendrez une réponse authentifiée : 🎜rrreee🎜🎜 Résumé 🎜🎜🎜 Dans cet article, nous avons expliqué comment implémenter l'authentification API à l'aide de Laravel Passport. Grâce à Laravel Passport, vous pouvez facilement ajouter une prise en charge d'authentification forte à votre API Web, rendant ainsi vos données utilisateur plus sécurisées. Laravel Passport fournit également d'autres fonctionnalités puissantes telles que la gestion des jetons d'accès API et la gestion des clients OAuth2. Si vous êtes un développeur Laravel, assurez-vous d'en savoir plus sur Laravel Passport et de l'utiliser dans votre prochain projet Web. 🎜

    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:php.cn
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