本文详细拆解了如何在Web应用中实现Token身份认证,从前端使用Pinia进行状态管理,到后端创建接口验证Token有效性,提供了一套完整的前后端联调解决方案,帮助开发者构建更安全的应用。
智能速览
使用Pinia在前端管理用户登录状态与Token。
修改公共请求函数,自动在请求头中携带Token。
后端创建接口,验证Token的有效性与过期时间。
根据Token状态(有效、过期、不存在)返回不同响应。
通过前后端联调,完整测试了整个认证流程。
精华内容
为了保障Web应用的安全与状态管理,基于Token的身份认证已成为主流方案。下面将从前后端两个层面,详细拆解其具体实现步骤。
前端状态管理
在前端,使用Pinia状态管理库创建一个名为`login`的Store。该Store中定义了`username`、`group`和`token`三个响应式对象,用于存储用户登录信息。同时,提供了`setData`方法用于更新状态,以及`deleteData`方法用于在用户登出时清除所有数据,为Token的存储和管理奠定了基础。
请求封装与携带
为了确保每个需要认证的请求都能自动携带凭证,需要修改全局的公共请求函数`fetchPost`。在该函数内部,首先获取`loginStore`的全局状态对象。如果对象中存在`token`,则向请求头(Headers)中添加`Authorization`字段,其值为`Bearer`加上一个空格和Token字符串。这样就实现了请求的自动封装。
后端验证接口
在服务器端,创建一个`/estoken-test`的API接口用于测试Token验证。该接口通过之前部署的JWT验证中间件,自动解码请求头中的Token并获取用户信息。通过获取当前秒级时间戳,并与解码后用户对象中的`exp`(过期时间)字段进行比对,以此判断用户的登录状态是否仍然有效。
响应逻辑与安全
接口会根据验证结果返回不同的响应。如果Token有效且未过期,则返回用户ID和权限。若Token已过期,则返回错误代码20,并提示“登录已过期,请重新登录”。如果请求中未携带有效Token,则判定为非法用户,返回通用错误信息。这种设计既向合法用户提供了清晰反馈,也避免了对攻击者暴露过多系统信息。
掌握这套Token认证流程,能够显著提升Web应用的安全性和用户体验。它不仅是前后端分离架构下的重要一环,也为更复杂的权限控制奠定了基础。在你的项目中,你将如何应用这套认证机制?