laravel怎么集成JWT(JSON Web Tokens)进行API认证_laravel JWT API认证集成方法

发布时间 - 2025-11-03 00:00:00    点击率:
首先安装 tymon/jwt-auth 包并发布配置文件,接着生成 JWT 密钥;然后修改 auth.php 中的 api 驱动为 jwt,同时在 User 模型中实现 JWTSubject 接口;之后创建 APIAuthController 处理登录和登出逻辑,最后在 api.php 中定义路由并应用 auth:api 中间件保护接口。

如果您正在开发一个基于 Laravel 的 API 应用,并希望实现无状态的用户认证机制,JWT(JSON Web Tokens)是一个理想的选择。它能够在客户端和服务器之间安全地传递用户身份信息。以下是将 JWT 集成到 Laravel 项目中进行 API 认证的具体步骤。

本文运行环境:MacBook Pro,macOS Sonoma

一、安装 tymon/jwt-auth 扩展包

要使用 JWT 功能,需要引入社区广泛使用的 tymon/jwt-auth Composer 包,它是 Laravel 中集成 JWT 的主流解决方案。

1、打开终端并进入您的 Laravel 项目根目录。

2、执行以下命令来安装 jwt-auth 包:

composer require tymon/jwt-auth

二、发布 JWT 配置文件

安装完成后,需要生成 JWT 的配置文件以便自定义令牌行为,例如过期时间、加密算法等。

1、运行以下 Artisan 命令以发布配置文件:

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

2、该操作会在 config/ 目录下创建一个名为 jwt.php 的配置文件,供后续修改使用。

三、生成 JWT 密钥

为了确保 token 的安全性,必须生成一个用于签名的密钥。这个密钥将被用来编码和解码 JWT。

1、在终端中执行以下命令生成 SECRET_KEY:

php artisan jwt:secret

2、此命令会自动在 .env 文件中添加一行 JWT_SECRET=随机字符串,无需手动设置。

四、配置 auth.php 支持 JWT 驱动

Laravel 的认证系统需要知道使用 JWT 作为驱动,因此需修改默认的身份验证配置。

1、打开 config/auth.php 文件。

2、找到 'guards' 数组中的 api 项,将其 driver 值从 token 修改为 jwt

'api' => [

  'driver' => 'jwt',

  'provider' => 'users',

],

五、在 User 模型中引入 JWT Subject 协议

JWT 需要能够从用户模型中提取唯一标识符(通常是主键),因此需要让 User 类实现必要的接口。

1、打开 app/Models/User.php 文件(或您实际的用户模型路径)。

2、在类中引入 Tymon\JWTAuth\Contracts\JWTSubject 接口:

use Tymon\JWTAuth\Contracts\JWTSubject;

3、让 User 类实现该接口并添加两个必需方法:

public function getJWTIdentifier()

{

  return $this->getKey(); // 返回主键值

}

public function getJWTCustomClaims()

{

  return []; // 可添加自定义声明

}

六、创建 API 认证控制器处理登录与登出

需要创建一个控制器来处理用户的登录请求并返回 JWT 令牌,同时支持注销时使令牌失效。

1、使用 Artisan 命令生成控制器:

php artisan make:controller Auth/APIAuthController

2、在控制器中添加 login 方法,验证凭据后返回 token:

use JWTAuth;

use Illuminate\Http\Request;

public function login(Request $request)

{

  $credentials = $request->only('email', 'password');

  try {

    if (! $token = JWTAuth::attempt($credentials)) {

      return response()->json(['error' => 'invalid_credentials'], 401);

    }

  } catch (JWTException $e) {

    return response()->json(['error' => 'could_not_create_token'], 500);

  }

  return response()->json(compact('token'));

}

3、添加 logout 方法用于退出登录:

public function logout()

{

  JWTAuth::invalidate(JWTAuth::getToken());

  return response()->json(['message' => 'Successfully logged out']);

}

七、定义 API 路由并应用中间件保护

通过路由注册认证端点,并使用 JWT 中间件保护需要身份验证的接口。

1、打开 routes/api.php 文件。

2、添加如下路由:

use App\Http\Controllers\Auth\APIAuthController;

Route::post('login', [APIAuthController::class, 'login']);

Route::middleware('auth:api')->group(function () {

  Route::post('logout', [APIAuthController::class, 'logout']);

  Route::get('user', function () {

    return auth()->user();

  });

});


# laravel  # php  # word  # js  # json  # go  # composer  # 编码  # app  # macbook  # mac  # 中间件  # if  # require  # try  # catch  # Error  # Token  # 标识符  # 字符串  # 接口  # class  # public  # 并发  # function  # this  # macos  # 算法  # http  # 加密算法  # 配置文件  # 令牌  # 自定义  # 创建一个  # 身份验证  # 主键  # 是一个  # 您的  # 运行环境  # 如果您 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  如何做网站制作流程,*游戏网站怎么搭建?  如何用好域名打造高点击率的自主建站?  电商网站制作价格怎么算,网上拍卖流程以及规则?  Laravel如何实现用户密码重置功能?(完整流程代码)  如何在万网自助建站平台快速创建网站?  简单实现jsp分页  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  LinuxCD持续部署教程_自动发布与回滚机制  如何破解联通资金短缺导致的基站建设难题?  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  Android自定义listview布局实现上拉加载下拉刷新功能  Android使用GridView实现日历的简单功能  Laravel安装步骤详细教程_Laravel环境搭建指南  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  如何快速生成ASP一键建站模板并优化安全性?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  Internet Explorer官网直接进入 IE浏览器在线体验版网址  清除minerd进程的简单方法  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  Laravel集合Collection怎么用_Laravel集合常用函数详解  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  Swift中switch语句区间和元组模式匹配  JavaScript实现Fly Bird小游戏  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  WordPress 子目录安装中正确处理脚本路径的完整指南  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  非常酷的网站设计制作软件,酷培ai教育官方网站?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  在线制作视频的网站有哪些,电脑如何制作视频短片?  高性价比服务器租赁——企业级配置与24小时运维服务  Laravel如何创建自定义Facades?(详细步骤)  如何在建站主机中优化服务器配置?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  中国移动官方网站首页入口 中国移动官网网页登录  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  如何在阿里云部署织梦网站?  如何在云主机快速搭建网站站点?  如何在宝塔面板创建新站点?  微信小程序 canvas开发实例及注意事项  三星、SK海力士获美批准:可向中国出口芯片制造设备  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  javascript中的try catch异常捕获机制用法分析  如何在阿里云香港服务器快速搭建网站?