国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

xiangzhihong / 1016人閱讀

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

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è)計(jì)

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

mongo

user.js

key type name
_id ObjectId mongo主鍵
short_id Number 用戶短id 基于redis.userTotalCount
name String 用戶名
mobile String 用戶注冊(cè)手機(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)建的時(shí)候隨機(jī)生成的0~1數(shù),用于隨機(jī)選取用戶
oauth Array 存儲(chǔ)用戶授權(quán)平臺(tái)的信息
-platform String 授權(quán)平臺(tái)名稱
-platform_user_id String 平臺(tái)的用戶id
-platform_user_name String 平臺(tái)用戶名
-email String 用戶在平臺(tái)綁定的郵箱
-avatar String 平臺(tái)的用戶頭像
-status Number 用戶狀態(tài) 0:active 1:baned
-bind_at Date 綁定時(shí)間

索引:

    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,每個(gè)app唯一
user_id String 關(guān)聯(lián)用戶表的_id
password String 用戶密碼
status Number 用戶狀態(tài) 0:active 1:baned
create_at Date 用戶改app的注冊(cè)時(shí)間
update_at Date 用戶信息更新時(shí)間
last_login Date 上次登錄時(shí)間
last_refresh Date 上冊(cè)refresh token 時(shí)間
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 的到期時(shí)間
refresh_expire_at Date refresh token 的到期時(shí)間
platform Array 使用過的平臺(tái)

索引:

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

工程目錄

common

const.js 存放靜態(tài)變量

error.map.js 存放錯(cuò)誤碼

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ù)庫(kù)代理文件夾

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

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

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

logs 日志文件夾

midware

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

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

log.js 我使用的是使用log4js,所以基于業(yè)務(wù)配置了不同的appender
這里放一點(diǎn)代碼解釋會(huì)實(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ù)庫(kù)model定義

router 路由定義

service 第三方服務(wù)等封裝,例如我把密碼加密,驗(yàn)證放在了這里做成一個(gè)服務(wù),token也封裝成一個(gè)服務(wù),這樣以后更改密碼加密形式或者token加密形式的時(shí)候就可以直接在這里改。

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;
};
/**
 * 密碼對(duì)比
 * @param password {string} 原始密碼
 * @param hash {string} 加密密碼
 * @return res {boolean} 比對(duì)結(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 測(cè)試用例文件夾

util 工具類的封裝

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/18997.html

相關(guān)文章

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

    摘要:加鹽加密原始密碼加密密碼密碼對(duì)比原始密碼加密密碼比對(duì)結(jié)果密碼匹配密碼不匹配測(cè)試用例文件夾工具類的封裝 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è)計(jì) redis app.js key...

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

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

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

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

    B0B0 評(píng)論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 等新語法,所以請(qǐng)保證 node 環(huán)境在 7.6...

    bang590 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<