摘要:加盐加密原始密码加密密码密码对比原始密码加密密码比对结果密码匹配密码不匹配测试用例文件夹工具类的封装
Ucenter
github
API doc
版本
version | content | date |
---|---|---|
v0.1.0 | 项目迁移构建 | 17.04.23 |
v0.2.0 | 支持通过github授权登录 | 17.05.23 |
model设计
redis
app.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 | 平台用户名 |
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 工具类的封装
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/18997.html
摘要:加盐加密原始密码加密密码密码对比原始密码加密密码比对结果密码匹配密码不匹配测试用例文件夹工具类的封装 Ucenter github API doc 版本 version content date v0.1.0 项目迁移构建 17.04.23 v0.2.0 支持通过github授权登录 17.05.23 model设计 redis app.js key...
摘要:云集一线大厂有真正实力的程序员团队云集一线大厂经验丰厚的码农,开源奉献各教程。融合多种常见的需求场景网络请求解析模板引擎静态资源日志记录错误请求处理。结合语句中转中间件控制权,解决回调地狱问题。注意分支中的目录为当节课程后的完整代码。 ?? 与众不同的学习方式,为你打开新的编程视角 独特的『同步学习』方式 文案讲解+视频演示,文字可激发深层的思考、视频可还原实战操作过程。 云...
摘要:玩转同时全面掌握潮流技术采用新一代的开发框架更小更富有表现力更健壮。融合多种常见的需求场景网络请求解析模板引擎静态资源日志记录错误请求处理。结合语句中转中间件控制权,解决回调地狱问题。注意分支中的目录为当节课程后的完整代码。 ?? 与众不同的学习方式,为你打开新的编程视角 独特的『同步学习』方式 文案讲解+视频演示,文字可激发深层的思考、视频可还原实战操作过程。 云集一线大厂...
安装搭建项目的开发环境 视频地址:https://www.cctalk.com/v/15114357764004 showImg(https://segmentfault.com/img/remote/1460000012470016?w=1214&h=718); 文章 Koa 起手 - 环境准备 由于 koa2 已经开始使用 async/await 等新语法,所以请保证 node 环境在 7.6...
阅读 2789·2021-11-24 09:39
阅读 2548·2021-11-23 09:51
阅读 1801·2021-11-17 09:33
阅读 1736·2021-10-22 09:54
阅读 1870·2021-08-16 11:00
阅读 3420·2019-08-30 15:53
阅读 1732·2019-08-30 13:19
阅读 2901·2019-08-30 12:49