Laravel 8 REST API身份验证与JWT教程示例
在该文中,我们将学习如何使用最新的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/
相关文章