<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] ### 基于JSON WEB TOKEN 封裝 中間件鑒權 1. 導入 jsonwebtoken 包 文檔:[https://www.npmjs.com/package/jsonwebtoken](https://www.npmjs.com/package/jsonwebtoken) 安裝:`npm?install?jsonwebtoken` ***** 2. egg 框架配置 config / config.default.js 中配置 jwt ``` /********** token 配置 **********/ config.jwt = { secret: 'bcrypt', expiresIn: 60*60*2 // 2小時過期 } ``` >[danger] secret : token 加密密鑰 > expiresIn:token 有效期 app / extend / context.js 擴展 ctx 屬性 ``` const Cryptojs = require('crypto-js'); const jwt = require('jsonwebtoken'); module.exports = { get jwt() { return jwt }, returnSucc(msg='成功', code=0, httpCode=200) { throw new global.myErrors(msg, code, httpCode) }, returnError(msg='失敗', code=1, httpCode=400) { throw new global.myErrors(msg, code, httpCode) }, crypto(value) { return Cryptojs.HmacSHA256(value, 'drw_admin888').toString(); } } ``` ***** 3. 配置中間件 app / config / config.default.js ``` /********** 中間件配置 **********/ config.middleware = ['errorHandler', 'auth']; config.auth = { allowed: [ '/api/v1/user/register', '/api/v1/user/login' ] } ``` >[danger] allowed:不需要token驗證的路由 ***** 4. 書寫中間件 app / middleware / auth.js ``` /** * token 訪問授權 * @param oprions { Array } 配置項:不需要鑒權的路由 * @param app { Object } 當前應用 */ module.exports = (options, app) => { return async (ctx, next) => { // 1.排除不需要驗證 token 的路由 if (options.allowed.indexOf(ctx.request.url) > -1) return await next(options); //2. 獲取 header 頭token const { authorization = '' } = ctx.header; if (!authorization) ctx.returnError('您沒有權限訪問該接口!', 0, 401); let token = authorization.replace('Bearer ', '') //3. 根據token解密,換取用戶信息 let user = {}; try { user = ctx.jwt.verify(token, app.config.jwt.secret) } catch(err) { err.name === 'TokenExpiredError' ? ctx.returnError('token 已過期! 請重新獲取令牌') : ctx.returnError('Token 令牌不合法!'); } //4. 把 user 信息掛載到全局ctx上 ctx.auth = { uid: user.uid, scope: user.scope } // 5. 繼續執行 await next(options); } } ``` *****
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看