Laravel 8 REST API身份验证与JWT教程示例

2023-06-01 00:00:00 示例 教程 身份验证

在该文中,我们将学习如何使用最新的Laravel 8版本中的JWT对REST API进行身份验证。您将学习如何使用具有JWT身份验证的Laravel 8创建rest API。

我们将了解如何在Laravel 8中设置JWT身份验证,以及如何使用tymon / jwt-auth包实施安全的REST API。

Laravel 8 JWT认证教程示例

在本教程中,我们将逐步介绍如何使用PHP和Laravel 8通过JWT令牌进行身份验证来实现REST API。


第1步-创建Laravel 8应用程序

让我们通过使用Composer创建一个Laravel 8应用程序开始本教程,该应用程序是PHP开发人员的依赖项管理工具。

转到新的命令行界面,然后运行以下命令:

$ composer create-project --prefer-dist laravel / laravel laravel8jwtapp

第2步-配置MySQL数据库

使用Composer创建Laravel 8应用程序之后,让我们在第二步中配置一个MySQL数据库。

打开位于Laravel 8'应用程序根目录中的.env文件。接下来,添加以下数据库配置信息:

DB_CONNECTION = mysql
DB_HOST = 127.0.0.1
DB_PORT = 3306
DB_DATABASE = <数据库名称>
DB_USERNAME = <数据库用户名>
DB_PASSWORD = <数据库密码>

步骤3 —安装jwt-laravel

现在,我们已经配置了MySQL数据库,并配置了Laravel 8应用程序,让我们开始通过安装jwt-auth软件包来实现JWT身份验证。

回到终端并从项目文件夹的根目录运行以下命令:

$ composer require tymon/jwt-auth

步骤4 —在Laravel 8中设置JWT身份验证

在这一步,我们有一个配置了MySQL的Laravel 8应用程序。在上一步中,我们还安装了jwt-auth库。现在,让我们在应用程序中设置JWT身份验证。

转到config / app.php文件,并添加JWT提供程序和别名,如下所示:

'providers' => [
….
'TymonJWTAuthProvidersJWTAuthServiceProvider',
],
'aliases' => [
….
'JWTAuth' => 'TymonJWTAuthFacadesJWTAuth',
'JWTFactory' => 'TymonJWTAuthFacadesJWTFactory',
],

接下来,返回您的终端并运行以下命令:

$ php artisan vendor:publish --provider="TymonJWTAuthProvidersJWTAuthServiceProvider"

步骤5 —生成JWT密钥

在我们的Laravel 8应用中配置JWT身份验证之后。在这一步中,我们需要生成一个JWT密钥。

转至您的终端并运行以下命令来生成JWT密钥:

$ php artisan jwt:generate

接下来,打开vendor / tymon / src / Commands / JWTGenerateCommand.php并进行如下更新:

public function handle() {$this->fire();}

第6步—在Laravel 8用户模型中实现JWT身份验证

在Laravel 8中配置JWT之后,在这一步中,我们将在User模型中实现它。

打开App / User.php文件,并进行如下更新:

<?php 
namespace App;
use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;

class User extends Authenticatable
{
   use Notifiable;
   protected $fillable = [
       'name', 'email', 'password',
   ];
   protected $hidden = [
       'password', 'remember_token',
   ];
}

步骤7 —为JWT身份验证实现REST API控制器

现在,我们在REST API应用程序中实现一个Laravel 8控制器来处理JWT身份验证。

回到您的终端并运行以下命令来生成控制器:

$ php artisan make:controller JwtAuthController

接下来,打开app / http / controllers / JwtAuthController.php文件,并添加以下方法:

<?php
namespace AppHttpControllers;

use JWTAuth;
use Validator;
use AppUser;
use IlluminateHttpRequest;
use AppHttpRequestsRegisterAuthRequest;
use TymonJWTAuthExceptionsJWTException;
use SymfonyComponentHttpFoundationResponse;

class JwtAuthController extends Controller
{
   public $token = true;
 
   public function register(Request $request)
   {
        $validator = Validator::make($request->all(),
                     [
                     'name' => 'required',
                     'email' => 'required|email',
                     'password' => 'required',  
                     'c_password' => 'required|same:password',
                    ]);  

        if ($validator->fails()) {  
              return response()->json(['error'=>$validator->errors()], 401);
           }  
       $user = new User();
       $user->name = $request->name;
       $user->email = $request->email;
       $user->password = bcrypt($request->password);
       $user->save();
 
       if ($this->token) {
           return $this->login($request);
       }
 
       return response()->json([
           'success' => true,
           'data' => $user
       ], Response::HTTP_OK);
   }
 
   public function login(Request $request)
   {
       $input = $request->only('email', 'password');
       $jwt_token = null;
 
       if (!$jwt_token = JWTAuth::attempt($input)) {
           return response()->json([
               'success' => false,
               'message' => 'Invalid Email or Password',
           ], Response::HTTP_UNAUTHORIZED);
       }
 
       return response()->json([
           'success' => true,
           'token' => $jwt_token,
       ]);
   }
 
   public function logout(Request $request)
   {
       $this->validate($request, [
           'token' => 'required'
       ]);
       try {
           JWTAuth::invalidate($request->token);
           return response()->json([
               'success' => true,
               'message' => 'User logged out successfully'
           ]);
       } catch (JWTException $exception) {
           return response()->json([
               'success' => false,
               'message' => 'Sorry, the user cannot be logged out'
           ], Response::HTTP_INTERNAL_SERVER_ERROR);
       }
   }
 
   public function getUser(Request $request)
   {
       $this->validate($request, [
           'token' => 'required'
       ]);
       $user = JWTAuth::authenticate($request->token);
 
       return response()->json(['user' => $user]);
   }
}

步骤8 —添加Laravel 8 REST API路由

现在,我们已经在Laravel 8用户模型中实现了JWT身份验证。 在此步骤中,我们将继续创建REST API路由。

打开routes / api.php文件,并进行如下更新:

Route::post('login', '[email protected]');
Route::post('register', '[email protected]');
Route::group(['middleware' => 'auth.jwt'], function () {
   Route::get('logout', '[email protected]');
   Route::get('user-info', '[email protected]');
});

步骤9 —为您的Laravel 8 REST API身份验证服务

在Laravel 8 REST API应用程序中实现JWT身份验证后,让我们使用以下命令运行本地开发服务器:

$ php artisan serve

结论

在本教程中,我们逐步介绍了如何实施JWT身份验证来保护和保护使用PHP和Laravel 8创建的REST API端点。


转:https://shabang.dev/laravel-8-rest-api-authentication-with-jwt-tutorial-by-example/

相关文章