JWT功能開發 後端生成token

2021-10-05 05:36:15 字數 3098 閱讀 9305

安裝 jsonwebtoken

npm i -s jsonwebtoken
使用

const jwt = require('jsonwebtoken')

const = require('../utils/constant')

login(username, password).then(user => else ,

private_key,

)new result(, '登入成功').success(res)

}})

這裡需要定義 jwt 的私鑰和過期時間,過期時間不宜過短,也不宜過長,課程裡設定為 1 小時,實際業務中可根據場景來判斷,通常建議不超過 24 小時,保密性要求高的業務可以設定為 1-2 小時:

module.exports =
前端再次請求,結果如下:

}

可以看到 username 被正確解析,說明 token 生成成功

修改src/utils/request.js

service.interceptors.response.use(

response => )

// 判斷 token 失效的場景

if (res.code === -2) ).then(() => )})}

return promise.reject(new error(res.msg || '請求失敗'))

} else

},error => = error.response

message = data.msg

}message()

return promise.reject(error)

})

安裝 express-jwt

npm i -s express-jwt
建立/router/jwt.js

const expressjwt = require('express-jwt');

const = require('../utils/constant');

const jwtauth = expressjwt().unless();

module.exports = jwtauth;

/router/index.js中使用中介軟體

const jwtauth = require('./jwt')

// 註冊路由

const router = express.router()

// 對所有路由進行 jwt 認證

router.use(jwtauth)

/utils/contants.js中新增:

module.exports =
修改/model/result.js

expired(res)
修改自定義異常:

router.use((err, req, res, next) => ).expired(res.status(err.status))

} else ).fail(res.status(statuscode))

}})

後端新增路由的 jwt 認證後,再次請求/user/info將丟擲 401 錯誤,這是由於前端未傳遞合理的 token 導致,下面我們就修改/utils/request.js,使得前端請求時可以傳遞 token:

service.interceptors.request.use(

config => `

}return config

},error =>

)

前端去掉/user/info請求時傳入的 token,因為我們已經從 token 中傳入,修改src/api/user.js

export function getinfo() )

}

/db/index.js中新增:

function queryone(sql)  else 

}).catch(error => )

})}

/services/user.js中新增:

function finduser(username) '`

return queryone(sql)

}

此時有個問題,前端僅在 http header 中傳入了 token,如果通過 token 獲取 username 呢?這裡就需要通過對 jwt token 進行解析了,在/utils/index.js中新增 decode 方法:

const jwt = require('jsonwebtoken')

const = require('./constant')

function decode(req) else

return jwt.verify(token, private_key)

}

修改/router/user.js

router.get('/info', function(req, res)  else 

})} else

})

此時在前端重新登入,登入終於成功了!

修改src/store/modules/user.js

logout() )

resolve()

} catch (e)

})}

iOS 分享功能開發

如下圖 我們今天要講到的方式是使用了乙個第三方工具 一,註冊賬號 去官網註冊 二,sdk整合 新增依賴庫檔案 必須新增的依賴庫 根據社交平台需要新增的依賴庫 到此為止sdk整合就算完成 下來我們開始 部分 三,初始sharesdk和社交平台 1 設定根檢視控制器 必須設定rootviewcontro...

發票功能開發小結

1 li前面的點消除 list style none li不需要選不同的class名稱。只需要乙個class。可以使用 nth child n doctype html html head style p nth child odd p nth child even style head body ...

android 功能開發筆記

1,重力感應 感應器程式設計 a.獲取系統服務 sensor service 返回乙個sensormanager 物件 sensormanager sensormanager getsystemseriver sensor service b.通過sensormanager物件獲取相應的sensor...