讲师中心 微信公众号
AI工具推荐 视频效率加速

Yii框架RESTful接口Token失效怎么修_Yii框架刷新令牌机制【指南】

老萱君_6106

老萱君_6106

发布时间:2026-04-30 06:26:47

|

201人浏览过

|

来源于php中文网

原创

Yii框架RESTful接口默认不提供Token刷新机制,需手动实现refresh接口并配合前端处理401错误;推荐用Redis存储绑定用户、时效与次数的refresh_token,验证后签发短效access_token。

yii框架restful接口token失效怎么修_yii框架刷新令牌机制【指南】

Yii框架的RESTful接口本身不内置Token刷新机制,所谓“刷新令牌”必须由你手动实现逻辑、配合前端协作,否则401错误后只能重新登录。

为什么Yii默认没有Refresh Token流程

Yii的yii\filters\auth\HttpBearerAuth或QueryParamAuth只做单次验证:收到Token就解码JWT、查用户、验签名和过期时间,通过则放行,不通过直接返回401。它不关心“这个Token快过期了要不要换一个”,更不会自动下发新Token。

这意味着:

  • 前端拿到的access_token一旦过期,下次请求就会被拦在过滤器外,无法触发任何续期逻辑
  • 若依那种“每次请求顺带刷新”的滑动过期,是业务层主动写在拦截器里的,Yii原生不提供
  • 你看到的“刷新令牌”功能,几乎全是项目自己在Controller里额外加的refresh动作,比如POST /api/v1/auth/refresh

如何手动实现一个安全的refresh接口

关键不是生成新Token,而是控制刷新权限——不能让任意过期Token都能无限续期。

推荐做法:

Yii Framework 2.0.51
Yii Framework 2.0.51

Yii Framework 2.0.51 官方 Basic 应用模板,适合旧项目兼容、升级验证和开发测试。

下载
  • 用Redis存一份refresh_token(非JWT,是随机字符串),绑定用户ID + 过期时间(如7天)+ 使用次数限制(如最多续3次)
  • refresh接口只接受这个refresh_token,验证通过后才签发新的access_token(有效期30分钟)并更新Redis中对应记录
  • 旧access_token不用主动作废,JWT本身过期即失效;但refresh_token用一次就应更新或删除,防止重放
  • 在refresh成功响应头中返回Set-Cookie: refresh_token=xxx; HttpOnly; Secure; SameSite=Strict,避免JS读取泄露

示例控制器逻辑片段:

public function actionRefresh()
{
    $refreshToken = Yii::$app->request->get('refresh_token');
    $stored = Yii::$app->cache->get('refresh:' . $refreshToken);
    if (!$stored || $stored['user_id'] != Yii::$app->user->id) {
        throw new UnauthorizedHttpException('Invalid refresh token');
    }
    // 签发新 access_token
    $newToken = JwtHelper::generateToken(['uid' => $stored['user_id']], 1800); // 30分钟
    // 更新 refresh_token 记录(可选:换新值 + 重置计数)
    Yii::$app->cache->set('refresh:' . $refreshToken, $stored, 604800); // 7天
    return ['access_token' => $newToken];
}

前端调用refresh时容易踩的三个坑

后端写了接口,前端没配合好,照样白搭。

  • 没捕获401就直接跳登录页:应在全局HTTP拦截器里监听status === 401且响应体含"code": "token_expired"这类标识,再触发refresh,而不是无差别跳转
  • 并发请求导致多次refresh:用户快速点两个按钮,可能发出两个refresh请求,第二个会因第一个已消耗refresh_token而失败。需加锁或节流,例如用Promise缓存正在pending的refresh请求
  • 没更新本地存储的Token:refresh成功后,必须同步更新localStorage.setItem('access_token', ...)和axios.defaults.headers.common['Authorization'],否则下个请求还是拿旧Token

别碰“永不过期”的access_token

有团队为省事把JWT的exp设成0或极大值,这等于放弃时效性防护。只要Token泄露,攻击者就能永久冒充——尤其在RESTful场景下,Token常被存在localStorage,XSS漏洞即可直接盗取。

真正该延长的是refresh_token生命周期(比如7天),而access_token保持短时效(15–30分钟),这才是平衡安全与体验的合理边界。滑动过期也好、定时刷新也罢,核心都是让活跃用户免打扰,而不是让Token本身变“不死”。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

相关专题

更多
PHP API接口开发与RESTful实践
PHP API接口开发与RESTful实践

本专题聚焦 PHP在API接口开发中的应用,系统讲解 RESTful 架构设计原则、路由处理、请求参数解析、JSON数据返回、身份验证(Token/JWT)、跨域处理以及接口调试与异常处理。通过实战案例(如用户管理系统、商品信息接口服务),帮助开发者掌握 PHP构建高效、可维护的RESTful API服务能力。

504

2025.11.26

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

12066

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

1465

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

3217

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

5381

2024.03.01

PHP Yii框架专题
PHP Yii框架专题

本专题专注于PHP主流框架Yii的应用,系统讲解MVC架构、路由机制、数据库操作、表单处理、安全验证与RESTful API 开发等核心内容。通过电商网站、后台管理系统与内容管理平台等实战项目,帮助学员快速掌握Yii框架的开发技巧与实战经验。

2810

2025.09.04

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

80

2026.09.23

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

20

2026.09.23

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

20

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii Framework 2.0 API 官方文档
Yii Framework 2.0 API 官方文档

共0课时 | 0人学习

Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn