技术汇总:第十六章:关于登录与退出的token

简介: 技术汇总:第十六章:关于登录与退出的token

当两个设备都操作登录时,后操作的设备将具备登录权限,而之前登录的设备失去登录权限。

通常的登录业务,按照 token 随机生成的话,不同设备拥有不同的 token ,根据 token 来作为 key 保存登录数据,是可以同时登录同一个帐号,并且都保持在线的。因为这些 token 里面如果存登录状态的话,都会是已登录模式。

既然有这个唯一设备登录的需求,那就单独设置一个 user_login 的规则好了,比如 @caola 提供的方案, token 记录会话数据, userid 记录最后登录的 token ,这样只要有新请求过来,拿它的 token 以及 userid 里面存的 token 比较,不一致,就说明此登录已失效。

将用户输入的 账号和密码 提交给服务器;

服务器对其进行校验,若账号和密码对得上则校验通过,说明登录成功,并生成一个token值,将其保存在数据库,同时也返回给客户端;

客户端拿到返回的token值后,可将其保存在本地,作为公共参数,即以后每次请求服务器时都携带该token,提交给服务器,让服务器校验。

服务器接收到请求后,会取出请求头里的token值与数据库存储的token进行对比校验。若两个token值相同,则说明用户登录成功过,且当前正处于登录状态,此时正常返回数据,让APP显示数据。若两个值不一致,则说明原来的的登录已经失效,此时返回错误状态码,提示用户跳转至登录界面重新登录。用户每进行一次登录,登录成功后服务器都会更新个token新值返回给客户端。

个人观点:

我想用 { token: userId } 的形式将登录后产生的 token 保存在 redis 中,当用户使用 token 登录时就根据 token 来找出对应的 id ,但是这样在用户重新登录(比如换个设备,之前没退出)时,清除之前保存的 token。

token找到userId,换设备登录的时候清除之前的token或者重新利用,观点仅供参考:

1、你的情况可能是token存在了本地,不想暴露任何用户信息,包括id,所以你生成的token作为key中肯定不包含任何的用户信息,目的就是为了通过token找到id,然后再查询出用户信息,像这种情况我目前也只是想到通过redis本身的有效期来清除这些,token的作用可以理解为一个session

2、另外一种情况,我自己就会通过本地存储的token+device_token(设备号)通过各种加密方式产生一个key,假如是同一个设备又没有过期的情况下可以反复使用

前后端分离

首次登录时,后端服务器判断用户账号密码正确之后,根据用户id、用户名、定义好的秘钥、过期时间生成 token ,返回给前端;

前端拿到后端返回的 token ,存储在 localStroage 和 Vuex 里;

前端每次路由跳转,判断 localStroage 有无 token ,没有则跳转到登录页,有则请求获取用户信息,改变登录状态;

每次请求接口,在 Axios 请求头里携带 token;

后端接口判断请求头有无 token,没有或者 token 过期,返回401;

前端得到 401 状态码,重定向到登录页面。

相关文章
|
3月前
|
人工智能 搜索推荐 安全
【微笑讲堂】盘点市面上的Geo优化公司优点和缺点
微笑老师深度解析2025年Geo优化公司优劣势,涵盖快法务、欧博东方、大树科技等十大服务商。从技术实力、行业专长到数据透明与服务模式,全面解读AI时代下生成式引擎优化(GEO)新趋势,助力企业精准选择合作伙伴,抢占AI搜索红利。
382 7
|
应用服务中间件 容器
【JavaWeb】知识总结Ⅹ(HttpServletRequest, HttpServletResponse)
请求行信息:可以使用getMethod()方法获取请求方法(如GET、POST等),使用getRequestURI()方法获取请求的URI(统一资源标识符),使用getProtocol()方法获取请求使用的协议(如HTTP/1.1)。 请求头信息:可以使用getHeader(String name)方法获取指定名称的请求头的值,使用getHeaderNames()方法获取所有请求头的名称的枚举。 请求参数:可以使用getParameter(String name)方法获取指定名称的请求参数的值,使用getParameterNames()方法获取所有请求参数的名称的枚举。
|
小程序 JavaScript 关系型数据库
微信小程序远程连接阿里云服务器mysql——我与阿里云的相遇
第一次接触阿里云服务器:用小程序通过nodejs连接远程服务器
2277 0
微信小程序远程连接阿里云服务器mysql——我与阿里云的相遇
|
9月前
|
人工智能
Hi3DGen:2D照片秒变高精度模型,毛孔级细节完爆Blender!港中文×字节×清华联手打造3D生成黑科技
Hi3DGen是由香港中文大学、字节跳动和清华大学联合研发的高保真3D几何生成框架,通过法线图中间表示实现细节丰富的3D模型生成,其双阶段生成流程显著提升了几何保真度。
898 32
Hi3DGen:2D照片秒变高精度模型,毛孔级细节完爆Blender!港中文×字节×清华联手打造3D生成黑科技
|
10月前
|
IDE 程序员 编译器
鸿蒙开发:ArkTs语言注释
关于注释,有一点需要注意,那就是,注释,不会被编译器或解释器执行,而本小节的重点并不是简单的教大家注释如何去写,而是在实际的项目中,我们能够真正的把注释投入到实际的开发中。
337 18
鸿蒙开发:ArkTs语言注释
|
10月前
|
Ubuntu Linux 网络安全
防火墙设置
本文介绍了Ubuntu和CentOS系统中防火墙的基本设置方法。对于Ubuntu,重点讲解了UFW(Uncomplicated Firewall)的使用,包括查看状态、开启/关闭防火墙、管理端口和IP地址以及服务配置。而对于CentOS,主要涉及firewalld的常用操作,如查看状态、启动/关闭防火墙、设置开机启动、管理端口和IP地址,以及服务允许等具体命令示例。内容简洁实用,适合系统管理员快速上手。
994 10
|
人工智能 人机交互
Proactive Agent:清华联合面壁智能开源的新一代主动Agent交互范式
Proactive Agent是由清华大学联合面壁智能等团队推出的新一代主动Agent交互范式。它具备主动性,能够预测用户需求并在没有直接指令的情况下采取行动。本文详细介绍了Proactive Agent的主要功能、技术原理以及如何运行和评估其性能。
755 9
Proactive Agent:清华联合面壁智能开源的新一代主动Agent交互范式
|
人工智能 自然语言处理 算法
揭秘AI写作助手:技术原理与应用实践
在数字化浪潮的推动下,人工智能(AI)正逐步渗透到我们工作和生活的方方面面。本文将深入探讨AI写作助手的技术原理及其在不同场景的应用实例,旨在揭示这项技术如何助力内容创作、提升效率和质量。通过分析其背后的算法、数据处理方式以及实际运用效果,读者可以获得对AI写作工具更全面的认识,并了解如何利用这些工具优化自身的写作流程。
|
Java Spring Maven
Struts 2遇见Spring:这个组合如何颠覆你的Web开发?
【8月更文挑战第31天】在现代Web开发中,Struts 2与Spring的结合使用能显著增强应用的模块化和可维护性。本文将介绍如何整合这两个框架,并提供代码示例。首先,在`pom.xml`中添加Struts 2和Spring的依赖,然后在`struts.xml`中配置Struts 2以识别Spring插件。接着,在Spring配置文件中定义bean,并在Struts 2的Action类中使用`@Autowired`注解进行自动注入。
307 0