基于koa2开发的一个用户中心
2017-07-19 00:00
393 查看
Ucenter
..表格这边显示错误, github 地址版本
|version|content|date|:--|:----|:----
|v0.1.0|项目迁移构建|17.04.23
|v0.2.0|支持通过github授权登录|17.05.23
|v0.2.1|支持docker!从配置上支持😅|17.06.28
API doc
docker image
docker-compose run
docker-compose up -d
model设计
redisapp.js
|key|type|name
|:--|:----|:----
|apps|hash|hget apps {appId} =>{app secret}
token.js
|key|type|name
|:--|:----|:----
|token:${token}|hash|key为token的值|
|-access_token|hash field|access token
|-refresh_token|hash field|refresh token
|-app_id|hash field|token 对应的app
|-user_id|hash field|token对应的user id (objectId)
|-user_short_id|hash field|token对应的user 短id
|-expire_at|hash field|token 到期日期(timestamp)
|-type|hash field|token类型 (access_token/refresh_token)
user.js
|key|value|name
|:--|:--|:--
|user:total:${app}|keys|存储app对应的用户总数
|${year}-${month}-${today}:${app}|bitmap|存储每个app每日每个用户的在线状态和在线总数(详情可搜索如何用bitmap存储用户访问信息)
mongo
user.js
|key|type|name
|:--|:----|:----|
|_id|ObjectId|mongo主键
|short_id|Number|用户短id 基于redis.userTotalCount
|name|String|用户名
|mobile|String|用户注册手机
|apps|Array|用户关联的apps,以appId组成的Array
|status|Number|用户状态 0:active 1:baned
|create_at|Date|用户创建日期
|chance|Number|创建的时候随机生成的0~1数,用于随机选取用户
|oauth|Array|存储用户授权平台的信息
|-platform|String|授权平台名称
|-platform_user_id|String|平台的用户id
|-platform_user_name|String|平台用户名
|-email|String|用户在平台绑定的邮箱
|-avatar|String|平台的用户头像
|-status|Number|用户状态 0:active 1:baned
|-bind_at|Date|绑定时间
索引:
users.index({create_at: -1}); users.index({name: 1}); users.index({mobile: 1}); users.index({'oauth.platform': 1,'oauth.platform_user_id': 1}, {unique: true});
app.js
|key|type|name
|:--|:----|:----|
|_id|ObjectId|mongo主键
|app_id|String|app 独立的id,每个app唯一
|user_id|String|关联用户表的_id
|password|String|用户密码
|status|Number|用户状态 0:active 1:baned
|create_at|Date|用户改app的注册时间
|update_at|Date|用户信息更新时间
|last_login|Date|上次登录时间
|last_refresh|Date|上册refresh token 时间
|login_times|Number|登陆次数
索引:
apps.index({app_id: 1, user_id: 1});
token.js
|key|type|name
|:--|:--|:--
|_id|ObjectId|mongo主键
|user_id|String|token关联用户表的_id
|app_id|String|token关联的app_id
|access_token|String|access token
|refresh_token|String|refresh token
|access_expire_at|Date|access token 的到期时间
|refresh_expire_at|Date|refresh token 的到期时间
|platform|Array|使用过的平台
索引:
tokens.index({app_id: 1, user_id: 1});
工程目录
common
const.js 存放静态变量
error.map.js 存放错误码
config
config.dev.js 存放开发环境配置
config.workong.js 开发环境配置示例
config.production.js 存放生产环境配置
index.js 根据运行环境返回配置文件
controller 业务逻辑存放的文件目录
dao 数据库代理文件夹
mongo 对mongo的数据操作
sql 对sql的数据操作
redis 对redis的数据操作
logs 日志文件夹
midware
filter 该文件夹下的文件基于业务分类,封装了每个接口的数据过滤中间件
auth.js 验证中间件,验证token的合法性等用途
log.js 我使用的是使用log4js,所以基于业务配置了不同的appender
这里放一点代码解释会实际一点
const log4js = require('log4js'), adminLogger = log4js.getLogger('admin'), oauthLogger = log4js.getLogger('oauth'), commonLogger = log4js.getLogger('common'), userLogger = log4js.getLogger('user'); var user = async(ctx, next) => { ctx.logger = userLogger; await next() };
model 数据库model定义
router 路由定义
service 第三方服务等封装,例如我把密码加密,验证放在了这里做成一个服务,token也封装成一个服务,这样以后更改密码加密形式或者token加密形式的时候就可以直接在这里改。
passport.js
var bcrypt = require('bcrypt'); var Promise = require('bluebird'); var config = require('../config'); Promise.promisifyAll(bcrypt); /** * 加盐加密 * @param password {string} 原始密码 * @return hash {object} 加密密码 * @author gh */ var encrypt = async function(password) { var salt = await bcrypt.genSaltAsync(config.password.saltTimes); var hash = await bcrypt.hashAsync(password, salt); return hash; }; /** * 密码对比 * @param password {string} 原始密码 * @param hash {string} 加密密码 * @return res {boolean} 比对结果 true:密码匹配 | false:密码不匹配 * @author gh */ var validate = async function(password, hash) { var res = await bcrypt.compareAsync(password, hash); return res }; module.exports = { encrypt, validate }
test 测试用例文件夹
util 工具类的封装
相关文章推荐
- 一个基于flask的web应用诞生 用户注册功能开发(5)
- dota BP练习工具开发:一个C/S多用户程序
- 做的一个微信在线考试答题的模块,基于THINKPHP5开发的,逻辑图和关键代码奉上
- 明天开发的基于MOSS的一个业务系统要正式运行
- LuLuCMS基于Yii2.0开发的一个内容管理系统(CMS)
- 一个基于多用户的抓取视频下载系统 PhaGrabVideo
- 基于Retrotfit2.1+Material Design+ijkplayer开发的一个APP(新闻,gif 动图,视频播放)
- 使用jQuery mobile开发一个基于手机的在线餐馆订餐查询应用
- 在 .NET 中开发基于 Chrome 内核的浏览器-创建一个简单浏览器 分类: C# 2014-10-27 16:27 594人阅读 评论(0) 收藏
- android开发环境的搭建,基于eclipse.最后会附上一些参考网址算是一个合集给大家
- 基于c++11新标准开发一个支持多线程高并发的网络库
- Webservice_24_SOAP的基于契约优先开发用户管理_部署到Tomcat
- 汇总:基于SSM封装的一个迅速开发项目的底层框架集成项目
- 基于Visual C#的DirectX开发实例——绘制一个三角形
- 基于gulp编写的一个简单实用的前端开发环境
- 基于安卓开发后嵌入一个html5开发的项目碰到的问题
- 网络编程学习笔记二(实现一个基于简单TCP的用户注册程序)
- dota BP练习工具开发:一个C/S多用户程序
- Java 开发基于Zookeeper,Spring,vue.js的高并发多用户模块化微信商城系统(二) Zookeeper原理
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(三)用户接口层之RTSP命令