日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于koa2开发的用户中心

發(fā)布時間:2025/3/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于koa2开发的用户中心 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Ucenter

  • github

  • API doc

  • 版本

    versioncontentdate
    v0.1.0項目遷移構(gòu)建17.04.23
    v0.2.0支持通過github授權(quán)登錄17.05.23
  • model設計

    • redis

      • app.js

      keytypename
      appshashhget apps {appId} =>{app secret}
      • token.js

      keytypename
      token:${token}hashkey為token的值
      -access_tokenhash fieldaccess token
      -refresh_tokenhash fieldrefresh token
      -app_idhash fieldtoken 對應的app
      -user_idhash fieldtoken對應的user id (objectId)
      -user_short_idhash fieldtoken對應的user 短id
      -expire_athash fieldtoken 到期日期(timestamp)
      -typehash fieldtoken類型 (access_token/refresh_token)
      • user.js

      keyvaluename
      user:total:${app}keys存儲app對應的用戶總數(shù)
      ${year}-${month}-${today}:${app}bitmap存儲每個app每日每個用戶的在線狀態(tài)和在線總數(shù)(詳情可搜索如何用bitmap存儲用戶訪問信息)
    • mongo

      • user.js

      keytypename
      _idObjectIdmongo主鍵
      short_idNumber用戶短id 基于redis.userTotalCount
      nameString用戶名
      mobileString用戶注冊手機
      appsArray用戶關(guān)聯(lián)的apps,以appId組成的Array
      statusNumber用戶狀態(tài) 0:active 1:baned
      create_atDate用戶創(chuàng)建日期
      chanceNumber創(chuàng)建的時候隨機生成的0~1數(shù),用于隨機選取用戶
      oauthArray存儲用戶授權(quán)平臺的信息
      -platformString授權(quán)平臺名稱
      -platform_user_idString平臺的用戶id
      -platform_user_nameString平臺用戶名
      -emailString用戶在平臺綁定的郵箱
      -avatarString平臺的用戶頭像
      -statusNumber用戶狀態(tài) 0:active 1:baned
      -bind_atDate綁定時間

      索引:

      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
      _idObjectIdmongo主鍵
      app_idStringapp 獨立的id,每個app唯一
      user_idString關(guān)聯(lián)用戶表的_id
      passwordString用戶密碼
      statusNumber用戶狀態(tài) 0:active 1:baned
      create_atDate用戶改app的注冊時間
      update_atDate用戶信息更新時間
      last_loginDate上次登錄時間
      last_refreshDate上冊refresh token 時間
      login_timesNumber登陸次數(shù)

      索引:

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

      keytypename
      _idObjectIdmongo主鍵
      user_idStringtoken關(guān)聯(lián)用戶表的_id
      app_idStringtoken關(guān)聯(lián)的app_id
      access_tokenStringaccess token
      refresh_tokenStringrefresh token
      access_expire_atDateaccess token 的到期時間
      refresh_expire_atDaterefresh token 的到期時間
      platformArray使用過的平臺

      索引:

      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ù)運行環(huán)境返回配置文件

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

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

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

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

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

    • logs 日志文件夾

    • midware

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

      • auth.js 驗證中間件,驗證token的合法性等用途

      • log.js 我使用的是使用log4js,所以基于業(yè)務配置了不同的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 數(shù)據(jù)庫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} 比對結(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 工具類的封裝

總結(jié)

以上是生活随笔為你收集整理的基于koa2开发的用户中心的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。