成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

基于koa2開發(fā)的用戶中心

davidac / 769人閱讀

摘要:加鹽加密原始密碼加密密碼密碼對比原始密碼加密密碼比對結(jié)果密碼匹配密碼不匹配測試用例文件夾工具類的封裝

Ucenter

github

API doc

版本

version content date
v0.1.0 項(xiàng)目遷移構(gòu)建 17.04.23
v0.2.0 支持通過github授權(quán)登錄 17.05.23

model設(shè)計

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 對應(yīng)的app
-user_id hash field token對應(yīng)的user id (objectId)
-user_short_id hash field token對應(yīng)的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對應(yīng)的用戶總數(shù)
${year}-${month}-${today}:${app} bitmap 存儲每個app每日每個用戶的在線狀態(tài)和在線總數(shù)(詳情可搜索如何用bitmap存儲用戶訪問信息)

mongo

user.js

key type name
_id ObjectId mongo主鍵
short_id Number 用戶短id 基于redis.userTotalCount
name String 用戶名
mobile String 用戶注冊手機(jī)
apps Array 用戶關(guān)聯(lián)的apps,以appId組成的Array
status Number 用戶狀態(tài) 0:active 1:baned
create_at Date 用戶創(chuàng)建日期
chance Number 創(chuàng)建的時候隨機(jī)生成的0~1數(shù),用于隨機(jī)選取用戶
oauth Array 存儲用戶授權(quán)平臺的信息
-platform String 授權(quán)平臺名稱
-platform_user_id String 平臺的用戶id
-platform_user_name String 平臺用戶名
-email String 用戶在平臺綁定的郵箱
-avatar String 平臺的用戶頭像
-status Number 用戶狀態(tài) 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 獨(dú)立的id,每個app唯一
user_id String 關(guān)聯(lián)用戶表的_id
password String 用戶密碼
status Number 用戶狀態(tài) 0:active 1:baned
create_at Date 用戶改app的注冊時間
update_at Date 用戶信息更新時間
last_login Date 上次登錄時間
last_refresh Date 上冊refresh token 時間
login_times Number 登陸次數(shù)

索引:

    apps.index({app_id: 1, user_id: 1});

token.js

key type name
_id ObjectId mongo主鍵
user_id String token關(guān)聯(lián)用戶表的_id
app_id String token關(guān)聯(lián)的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 存放靜態(tài)變量

error.map.js 存放錯誤碼

config

config.dev.js 存放開發(fā)環(huán)境配置

config.workong.js 開發(fā)環(huán)境配置示例

config.production.js 存放生產(chǎn)環(huán)境配置

index.js 根據(jù)運(yùn)行環(huán)境返回配置文件

controller 業(yè)務(wù)邏輯存放的文件目錄

dao 數(shù)據(jù)庫代理文件夾

mongo 對mongo的數(shù)據(jù)操作

sql 對sql的數(shù)據(jù)操作

redis 對redis的數(shù)據(jù)操作

logs 日志文件夾

midware

filter 該文件夾下的文件基于業(yè)務(wù)分類,封裝了每個接口的數(shù)據(jù)過濾中間件

auth.js 驗(yàn)證中間件,驗(yàn)證token的合法性等用途

log.js 我使用的是使用log4js,所以基于業(yè)務(wù)配置了不同的appender
這里放一點(diǎn)代碼解釋會實(shí)際一點(diǎn)

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 數(shù)據(jù)庫model定義

router 路由定義

service 第三方服務(wù)等封裝,例如我把密碼加密,驗(yàn)證放在了這里做成一個服務(wù),token也封裝成一個服務(wù),這樣以后更改密碼加密形式或者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} 比對結(jié)果 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 工具類的封裝

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/88279.html

相關(guān)文章

  • 基于koa2開發(fā)用戶中心

    摘要:加鹽加密原始密碼加密密碼密碼對比原始密碼加密密碼比對結(jié)果密碼匹配密碼不匹配測試用例文件夾工具類的封裝 Ucenter github API doc 版本 version content date v0.1.0 項(xiàng)目遷移構(gòu)建 17.04.23 v0.2.0 支持通過github授權(quán)登錄 17.05.23 model設(shè)計 redis app.js key...

    xiangzhihong 評論0 收藏0
  • 【完結(jié)匯總】iKcamp出品基于Koa2搭建Node.js實(shí)戰(zhàn)共十一堂課(含視頻)

    摘要:云集一線大廠有真正實(shí)力的程序員團(tuán)隊(duì)云集一線大廠經(jīng)驗(yàn)豐厚的碼農(nóng),開源奉獻(xiàn)各教程。融合多種常見的需求場景網(wǎng)絡(luò)請求解析模板引擎靜態(tài)資源日志記錄錯誤請求處理。結(jié)合語句中轉(zhuǎn)中間件控制權(quán),解決回調(diào)地獄問題。注意分支中的目錄為當(dāng)節(jié)課程后的完整代碼。 ?? ?與眾不同的學(xué)習(xí)方式,為你打開新的編程視角 獨(dú)特的『同步學(xué)習(xí)』方式 文案講解+視頻演示,文字可激發(fā)深層的思考、視頻可還原實(shí)戰(zhàn)操作過程。 云...

    sPeng 評論0 收藏0
  • 開始連載啦~每周2更共11堂iKcamp課|基于Koa2搭建Node.js實(shí)戰(zhàn)項(xiàng)目教學(xué)(含視頻)|

    摘要:玩轉(zhuǎn)同時全面掌握潮流技術(shù)采用新一代的開發(fā)框架更小更富有表現(xiàn)力更健壯。融合多種常見的需求場景網(wǎng)絡(luò)請求解析模板引擎靜態(tài)資源日志記錄錯誤請求處理。結(jié)合語句中轉(zhuǎn)中間件控制權(quán),解決回調(diào)地獄問題。注意分支中的目錄為當(dāng)節(jié)課程后的完整代碼。 ?? ?與眾不同的學(xué)習(xí)方式,為你打開新的編程視角 獨(dú)特的『同步學(xué)習(xí)』方式 文案講解+視頻演示,文字可激發(fā)深層的思考、視頻可還原實(shí)戰(zhàn)操作過程。 云集一線大廠...

    B0B0 評論0 收藏0
  • iKcamp團(tuán)隊(duì)制作|基于Koa2搭建Node.js實(shí)戰(zhàn)項(xiàng)目教學(xué)(含視頻)? 環(huán)境準(zhǔn)備

    安裝搭建項(xiàng)目的開發(fā)環(huán)境 視頻地址:https://www.cctalk.com/v/15114357764004 showImg(https://segmentfault.com/img/remote/1460000012470016?w=1214&h=718); 文章 Koa 起手 - 環(huán)境準(zhǔn)備 由于 koa2 已經(jīng)開始使用 async/await 等新語法,所以請保證 node 環(huán)境在 7.6...

    bang590 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<