基于koa2开发的用户中心
生活随笔
收集整理的這篇文章主要介紹了
基于koa2开发的用户中心
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Ucenter
github
API doc
-
版本
versioncontentdate v0.1.0 項目遷移構建 17.04.23 v0.2.0 支持通過github授權登錄 17.05.23 -
model設計
-
redis
app.js
keytypename apps hash hget apps {appId} =>{app secret} token.js
keytypename 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
keyvaluename user:total:${app} keys 存儲app對應的用戶總數 ${year}-${month}-${today}:${app} bitmap 存儲每個app每日每個用戶的在線狀態和在線總數(詳情可搜索如何用bitmap存儲用戶訪問信息) -
mongo
user.js
keytypename _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
keytypename _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
keytypename _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 工具類的封裝
-
總結
以上是生活随笔為你收集整理的基于koa2开发的用户中心的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: virsh KVM管理工具
- 下一篇: MSICE界面和功能分析