TP6.0框架-----JWT-Auth认证

该博客介绍了如何使用Composer安装thans/tp-jwt-auth库,并通过PHP命令行生成JWT配置文件。接着展示了如何创建Token,进行Token验证,获取Payload信息,以及在退出登录时拉黑Token。同时,提到了当无法接收到Token时如何调整.htaccess文件。这是一个关于PHP JWT身份验证的实战指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

composer安装

composer require thans/tp-jwt-auth

生成jwt.php和.env配置文件

php think jwt:create

根据id生成Token

$token = JWTAuth::builder(['id' => 1])

Token验证(在中间件中添加)

JWTAuth::auth()

获取id

//可验证token, 并获取token中的payload部分
$payload = JWTAuth::auth(); 
//获取id
$id = $payload['id']->getValue(); 

获取请求中的完整token字符串

$tokenStr = JWTAuth::token()->get(); 

拉黑Token:(可用于退出登录)

JWTAuth::invalidate($tokenStr);

查询Token是否黑名单:

JWTAuth::validate($tokenStr);

接不到token:修改public/.htaccess文件

 RewriteCond  %{HTTP:Authorization} ^(.+)$
 RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

<think>我们使用前后端分离架构,前端用Vue2.0,后端用ThinkPHP6.0。 开发步骤: 1. 项目规划:确定功能模块(用户管理、订单管理、商品管理等)和接口需求。 2. 环境搭建:分别搭建前端和后端开发环境。 3. 前后端分离:前端负责页面展示和用户交互,后端提供API接口。 4. 接口定义:前后端协商确定API接口规范(请求方式、参数、返回格式等)。 5. 并行开发:前端根据接口规范模拟数据开发,后端实现接口逻辑。 6. 联调测试:前后端对接,测试功能。 7. 部署上线:前端打包部署到Web服务器(如Nginx),后端部署到PHP环境。 目录结构推荐: 前端项目(Vue2.0)目录结构: ``` ├── public # 静态资源(不经过webpack处理) │ ├── index.html # 主页面 │ └── favicon.ico # 网站图标 ├── src # 源代码 │ ├── assets # 静态资源(经过webpack处理) │ ├── components # 公共组件 │ ├── views # 页面视图 │ ├── router # 路由配置 │ ├── store # Vuex状态管理 │ ├── api # 接口请求封装 │ ├── utils # 工具函数 │ ├── App.vue # 根组件 │ └── main.js # 入口文件 ├── .env.development # 开发环境变量 ├── .env.production # 生产环境变量 └── package.json # 项目配置 ``` 后端项目(ThinkPHP6.0)目录结构: ``` ├── app # 应用目录 │ ├── controller # 控制器 │ ├── model # 模型 │ ├── service # 服务层(可选) │ └── ... # 其他(如中间件、验证器等) ├── config # 配置文件 ├── public # 入口文件和静态资源 │ └── index.php # 入口文件 ├── route # 路由定义 ├── extend # 扩展类库 ├── vendor # 第三方类库 └── .env # 环境变量 ``` 开发步骤详细说明: 1. 项目规划: - 确定功能模块:用户管理(登录、注册、用户信息维护)、订单管理(订单创建、查询、修改)、商品管理(商品增删改查)等。 - 设计数据库表结构。 2. 环境搭建: - 前端:安装Node.js、Vue CLI,创建Vue项目。 - 后端:安装PHP(>=7.1)、Composer,使用Composer创建ThinkPHP项目。 3. 前后端分离: - 前端通过axios请求后端API,后端返回JSON数据。 4. 接口定义: - 使用RESTful风格,例如: - 用户登录:POST /api/user/login - 获取用户列表:GET /api/user/list - 创建订单:POST /api/order - 等等。 - 定义统一的响应格式,例如:{ code: 200, msg: 'success', data: ... } 5. 并行开发: - 前端:使用mock.js模拟接口数据,开发页面和交互。 - 后端:实现接口,连接数据库,处理业务逻辑。 6. 联调测试: - 前后端对接,调试接口,确保功能正常。 7. 部署: - 前端:执行`npm run build`生成静态文件,部署到Nginx。 - 后端:将代码部署到PHP服务器(如使用Apache或Nginx+PHP-FPM),配置伪静态(将所有请求指向public/index.php)。 注意事项: - 跨域问题:后端需要设置跨域支持,可以在入口文件或中间件中添加响应头。 - 安全性:用户认证使用JWT(JSON Web Token)或Session,接口进行权限验证。 - 数据校验:前后端都要进行数据校验。 以上是一个基本的开发步骤和目录结构,根据项目实际情况可调整。</think>### 使用 Vue2.0ThinkPHP6.0 开发机车管理系统的步骤与目录结构 #### 一、开发步骤(前后端分离) 1. **项目初始化** - 前端:`vue create frontend`(选择 Vue2 + Vue Router + Vuex) - 后端:`composer create-project topthink/think backend`(创建 ThinkPHP6 项目) 2. **接口协议定义** - 使用 Swagger/Postman 定义 RESTful API 规范 - 示例接口: - 用户登录:`POST /api/v1/login` - 订单列表:`GET /api/v1/orders` 3. **并行开发** - 前端:使用 Axios 请求 Mock 数据 - 后端:实现 JWT 认证和 API 逻辑 ```php // 示例:ThinkPHP 用户认证中间件 public function handle($request, \Closure $next) { if (!JWT::verifyToken()) { return json(['code' => 401, 'msg' => '未授权']); } return $next($request); } ``` 4. **联调测试** - 前端配置代理解决跨域(vue.config.js): ```js devServer: { proxy: { '/api': { target: 'http://localhost:8000', changeOrigin: true } } } ``` 5. **部署上线** - 前端:`npm run build` 生成静态文件部署到 Nginx - 后端:使用 Nginx + PHP-FPM 部署 API 服务 --- #### 二、推荐目录结构 **前端项目(Vue2.0)** ```bash src/ ├── api/ # 接口封装 │ └── auth.js # 认证接口 │ └── order.js # 订单接口 ├── assets/ # 静态资源 ├── components/ # 通用组件 │ ├── Table/ # 表格组件 │ └── Pagination.vue # 分页组件 ├── router/ # 路由配置 ├── store/ # Vuex 状态管理 │ ├── modules/ # 模块化store │ │ ├── user.js # 用户状态 │ │ └── order.js # 订单状态 │ └── index.js ├── views/ # 页面视图 │ ├── User/ # 用户管理 │ │ ├── List.vue # 用户列表 │ │ └── Edit.vue # 编辑用户 │ ├── Order/ # 订单管理 │ └── Product/ # 商品管理 └── utils/ # 工具类 └── request.js # Axios封装 ``` **后端项目(ThinkPHP6.0)** ```bash app/ ├── controller/ # 控制器 │ ├── v1/ # API版本目录 │ │ ├── User.php # 用户控制器 │ │ └── Order.php # 订单控制器 ├── model/ # 数据模型 │ ├── User.php # 用户模型 │ └── Order.php # 订单模型 ├── middleware/ # 中间件 │ └── JwtAuth.php # JWT认证 ├── service/ # 服务层 │ └── OrderService.php # 订单逻辑 ├── validate/ # 验证器 │ └── UserValidate.php ├── event/ # 事件监听 config/ ├── route/ # 路由配置 │ └── app.php # API路由定义 public/ ├── index.php # 入口文件 .env # 环境变量 ``` --- #### 三、关键实现要点 1. **认证机制** - 使用 JWT 实现无状态认证 - 前端在 Axios 拦截器中添加 Token: ```js axios.interceptors.request.use(config => { config.headers.Authorization = `Bearer ${localStorage.getItem('token')}` return config }) ``` 2. **数据交互规范** - 统一响应格式(后端): ```php return json([ 'code' => 200, 'msg' => 'success', 'data' => $orderList ]); ``` 3. **权限控制** - 基于 RBAC 实现权限管理 - 后端中间件验证权限: ```php public function handle($request, \Closure $next, $role) { if (!Auth::user()->hasRole($role)) { return json(['code' => 403, 'msg' => '禁止访问']); } return $next($request); } ``` --- #### 四、部署优化建议 1. **性能优化** - 前端:路由懒加载 `component: () => import('./User.vue')` - 后端:开启 OPcache 并配置路由缓存 2. **安全措施** - SQL 过滤:`Db::name('user')->where('id', $id)->find()` - XSS 防护:`htmlspecialchars($input)` - CSRF 防护:前端 Axios 配置 `withCredentials: true` 3. **持续集成** - 使用 Jenkins 自动化部署 - 编写 PHPUnit 测试用例保证核心逻辑 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值