Node.js游戏服务器项目移植 6-轻量化Token登录概述
本文介绍了基于Express框架的轻量级邮箱登录系统设计方案。系统采用Token无状态认证方案,使用MongoDB存储用户数据,通过UUID生成唯一Token和用户ID,实现自动注册登录功能。文章详细阐述了系统架构、设计思路和功能实现,包括基础服务配置、数据库连接封装、工具方法设计以及核心接口实现(邮箱自动登录、测试登录、独立注册等)。同时指出了当前方案的局限性(内存缓存、无过期机制等),并提出了
之前的项目是Express,考虑再三还是决定继续沿用之前的技术栈。首先处理的是登录系统,需要实现邮箱登录,手机登录,微信登录,这篇文章只写了邮箱登录。老项目没有使用redis,需要实现这一部分。
一、简介
-
服务框架:Express(轻量高效的Node.js Web框架,专注接口开发)
-
数据库:MongoDB(非关系型数据库,适配游戏用户、普通用户数据存储)
-
数据解析:body-parser(解析前端JSON、表单请求参数)
-
唯一ID生成:uuid(生成Token、用户唯一玩家ID)
-
数据加密:自定义工具类MD5加密(密码脱敏存储)
-
身份认证:内存缓存Token(轻量化无状态登录)
二、设计思路
不适用传统Session+Cookie的登录模式,采用Token无状态认证方案
-
用户登录/注册成功后,服务端生成唯一UUID Token作为身份凭证;
-
服务端通过内存缓存维护Token与用户信息的映射关系,快速校验身份;
-
前端持有Token,后续所有接口请求携带Token完成身份鉴权;
-
支持邮箱一键自动注册登录、独立注册、测试快捷登录三种场景;
-
统一接口返回格式,全局跨域配置,适配前后端分离开发。
三、功能拆解
1. 基础服务与全局中间件配置
项目初始化后,首先配置全局通用中间件,解决前后端开发核心问题:参数解析与跨域报错。
通过body-parser实现对前端POST请求的JSON、表单数据解析,保证后端可正常获取req.body参数;自定义CORS跨域中间件,放行所有域名、请求头和请求方法,同时处理浏览器OPTIONS预检请求,彻底解决本地调试跨域问题。
2. 数据库连接封装
系统封装了全局数据库实例与懒连接函数ensureDb,核心优势为按需连接、避免资源浪费。
服务启动后不会立即连接数据库,仅在执行登录、注册等数据库操作时,先判断连接状态,未连接则自动完成连接,有效避免服务启动耗时过长、数据库无效占用等问题,适配轻量化服务部署。
3. 工具能力封装(核心基础)
为保证系统统一性,封装了三类核心工具方法:
-
Token生成:基于uuid.v4生成随机唯一令牌,作为用户登录凭证;
-
玩家ID生成:基于uuid.v1去除横杠,生成无重复用户唯一标识,用于业务关联;
-
Token内存缓存:以键值对形式存储Token、用户信息、创建时间,实现高效身份查询,无需每次查询数据库。
4. 接口实现
4.1 邮箱自动注册登录接口
接口地址:POST /api/login/email
核心的业务接口,区别于传统登录系统,可以进行无账号自动注册登录,极大优化用户体验:
-
参数校验:校验邮箱、密码非空,正则验证邮箱格式,限制密码最低6位;
-
密码脱敏:将前端传入的明文密码通过MD5加密后再校验/存储,杜绝明文存储风险;
-
智能分支逻辑:邮箱未注册则自动创建账号、生成昵称并登录;邮箱已注册则校验密码,密码正确更新最后登录时间;
-
生成Token并缓存用户信息,统一返回登录结果,区分新用户和老用户登录场景。
4.2 测试快捷登录接口
接口地址:POST /api/login/test
为测试场景设计,输入固定密钥即可快速生成临时测试账号,无需手动注册,大幅提升调试效率。自动创建唯一测试用户,复用登录逻辑生成Token,不影响正式用户数据。
4.3 独立邮箱注册接口
接口地址:POST /api/register,前端暂时留空
提供纯注册能力,校验邮箱唯一性,避免重复注册,支持自定义昵称,注册成功后返回用户基础信息,适配需要先注册、后登录的业务场景,与自动登录接口形成互补。
4.4 Token鉴权查询用户接口
接口地址:GET /api/user/me
前端通过携带Token查询当前登录用户信息,校验Token有效性,实现页面登录态校验、用户信息回显功能,是前端全局身份校验的核心接口。
四、现有方案缺陷与生产级优化方案
4.1 现有短板
-
内存缓存局限性:Token存储在服务器内存,服务重启后登录态全部失效,多实例部署无法共享登录态;
-
Token无过期机制:当前Token永久有效,存在账号被盗用、长期占用缓存的风险;
-
安全策略薄弱:仅MD5加密密码(无加盐)、跨域全开、无接口限流、无防刷机制;
-
异常处理简单:统一返回通用错误信息,不利于线上问题排查。
4.2 生产级优化建议
-
缓存升级:将内存缓存替换为Redis,实现Token分布式存储、自动过期、多服务共享登录态;
-
增加Token过期机制:配置2小时/24小时过期时间,新增刷新Token接口,保障账号安全;
-
密码加密升级:MD5加盐加密或替换为bcrypt加密,避免彩虹表破解;
-
安全加固:限制指定域名跨域、添加接口限流、请求参数脱敏、恶意请求拦截;
-
日志优化:细分错误日志、操作日志,记录用户登录IP、时间、设备信息,便于问题追溯。
笔者注
因为需求如此不需要继续深入优化,这套基础方案可以应付当前项目,后继使用redis,其他无必要花费精力。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)