# anlin-ssr-koa **Repository Path**: huzhanlin/anlin-ssr-koa ## Basic Information - **Project Name**: anlin-ssr-koa - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-01-30 - **Last Updated**: 2023-06-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### 目录结构 1. middleware 放置中间件 alicloud/cors/email/https/jwt/redis/session/static/ws/crypto 2. mongoDB 连接数据库 3. router 路由文件夹 sign/rules/admin/schema 4. util 放置工具函数 checkUndefined/back/regexp 5. public 静态目录 #### 接口返回代码(code): 0: 成功 -400: 账号已存在 -401:用户名或者密码错误 -402: 用户未注册 -201: 权限验证失败 -101:参数验证失败 -102:短信发送失败 -103:验证码错误 500: 服务器出错,请稍后再试 #### 权限(role): -10: 被禁用用户 10: 普通会员 100: 管理员 #### 其他 1. 路由权限认证 jwt 2. 开启https 3. 阿里云短信发送 4. 开启session 5. 开启websocket 6. 开启跨域 7. 直传数据到阿里云 #### 待解决 1. 不使用lodash,将_.random改成普通函数 已解决 #### 注意项 1. session 不能使用带_变量 2. session 需要axios开启 axios.defaults.withCredentials = true; 3. 测试阶段浏览器必须使用https://localhost:80/register作为访问对象,否则不能认为是同一个域名,上线后是否要做反向代理,需要测试 4. websocket 当前链接的端口号为8080,将影响8080端口服务 #### http ws的链接需要前端链接,前端实例代码 index.html ws://localhost:8080' 使用live-server index.html --port=8080 链接http #### https ws的链接需要前端链接,前端实例代码 index.html wss://localhost:8000 而且https接口必须在浏览器打开之后,接触警告 使用live-server index.html --port=8000 使用redis + 独特的时间毫秒数 + 账号 做 key, 保证每次进入的页面都是新的sessionId,并且验证码始终跟随对应填写的account 针对登录系统,做了验证码只能被消费一次,验证码如果没有被消费,3分钟/5分钟内不能再次被发送 针对修改密码不能是原密码的操作,针对验证码是 自定义jwt 处理 1. 每次登陆生成新的token, 2. 新的token生成后,旧的失效 3. 每次调用接口需要延期token 4. token能够单独使用,不依赖sessionID 1. 登陆的时候获取authorization 如果有authorization,则取authorization中的时间戳 并在jwt.sign方法中做最后一个参数传过去 jwt.sign方法需要3个参数和一个非必传的参数,其中第一次参数为_id, 第二个参数为时间戳,第三个参数为变量存在的时间 非必传参数为authorization中的时间戳,如果有这个时间戳表示用户之前登陆过账号,则删除上一次的token,返回新的token 拿到新的token之后传给前端, 前端覆盖旧的token,使用新的token来进行请求 2. 接口验证 当使用rules的接口时,首先判断authorization是否存在,如果不存在则返回权限失败 authorization存在的情况下,判断是否为字符串,如果不为字符串则返回权限失败 authorization为字符串的时候,获取authorization中的时间戳,并将这个token存在时间延长 authorization为字符串的时候,获取authorization中的_id,判断当前用户是否在调用admin的接口,如果在调用admin的接口,再判断这个用户权限是否是管理员 如果当前token不存在,则表示已经超过,则返回权限失败 在rules接口中,如果需要_id,则通过authorization取 签到得点击完成,限制没有完成 70 2021/05/08 签到的前端应该通过true和false来判断是否更改,而不是通过-210等错误码来判断,后面返回的code都变成0 登陆的时候也要传旧的token,用来删除过期的token