- 執行npm i jsonwebtoken --save 安裝第三方庫
- 在util.js中引用,並添加token生成函數
在config.js中添加全局變量
security:{
secretKey: 'pdooawjjypomqynn',
expiresIn: 60*60 // 令牌的過期時間
}
util.js
const jwt = require('jsonwebtoken')
// 生成token
const generateToken = function(uid, scope){
const secretKey = global.config.security.secretKey
const expiresIn = global.config.security.expiresIn
const token = jwt.sign({
uid,
scope
},secretKey,{
expiresIn
})
return token
}
module.exports = {
findMembers,
generateToken,
}
- 在token.js api文件中使用token生成函數
const {generateToken} = require('../../../core/util')
router.post('/', async (ctx)=>{
const v = await new ValidationToken().validate(ctx)
let token;
// 根據不同的登錄方式,返回客戶端不同的信息
switch (v.get('body.type')) {
case LoginType.USER_EMAIL:
token = await emailLogin(v.get('body.account'), v.get('body.secret'))
break;
case LoginType.USER_MINI_PROGRAM:
break;
default:
throw new ParameterException('沒有相關處理函數')
break;
}
ctx.body = {
token
}
})
// 比對客戶端傳遞的用戶名和密碼是否與數據庫中的一致,如果一致就頒佈令牌
async function emailLogin(account, secret){
const user = await User.verifyEmailPassword(account, secret)
return generateToken(user.id, 2)
}
module.exports = router