摘要:加鹽加密原始密碼加密密碼密碼對比原始密碼加密密碼比對結果密碼匹配密碼不匹配測試用例文件夾工具類的封裝
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 工具類的封裝
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/88279.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...
閱讀 3085·2021-11-25 09:43
閱讀 2262·2021-09-07 10:28
閱讀 3588·2021-08-11 11:14
閱讀 2784·2019-08-30 13:49
閱讀 3551·2019-08-29 18:41
閱讀 1170·2019-08-29 11:26
閱讀 1981·2019-08-26 13:23
閱讀 3380·2019-08-26 10:43