yuan_yi
3 years ago
9 changed files with 221 additions and 63 deletions
@ -0,0 +1,61 @@ |
|||
/* eslint-disable*/ |
|||
'use strict'; |
|||
|
|||
module.exports = dc => { |
|||
const DataTypes = dc.ORM; |
|||
const sequelize = dc.orm; |
|||
const SecretYingshi = sequelize.define("secretYingshi", { |
|||
id: { |
|||
type: DataTypes.INTEGER, |
|||
allowNull: false, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: true, |
|||
field: "id", |
|||
autoIncrement: true, |
|||
unique: "secret_yingshi_id_uindex" |
|||
}, |
|||
key: { |
|||
type: DataTypes.STRING, |
|||
allowNull: false, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "key", |
|||
autoIncrement: false |
|||
}, |
|||
secret: { |
|||
type: DataTypes.STRING, |
|||
allowNull: false, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "secret", |
|||
autoIncrement: false |
|||
}, |
|||
token: { |
|||
type: DataTypes.STRING, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "token", |
|||
autoIncrement: false |
|||
}, |
|||
expire: { |
|||
type: DataTypes.STRING, |
|||
allowNull: true, |
|||
defaultValue: null, |
|||
comment: null, |
|||
primaryKey: false, |
|||
field: "expire", |
|||
autoIncrement: false |
|||
} |
|||
}, { |
|||
tableName: "secret_yingshi", |
|||
comment: "", |
|||
indexes: [] |
|||
}); |
|||
dc.models.SecretYingshi = SecretYingshi; |
|||
return SecretYingshi; |
|||
}; |
@ -0,0 +1,49 @@ |
|||
'use strict'; |
|||
|
|||
const moment = require('moment') |
|||
|
|||
module.exports = function (app, opts) { |
|||
async function token4yingshi ({ key, secret, token, expire } = {}) { |
|||
const { models } = app.fs.dc |
|||
if (!key || !secret) { |
|||
throw '参数 { key, secret } 缺一不可' |
|||
} |
|||
|
|||
if (token && expire && moment().isBefore(moment(expire))) { |
|||
return token |
|||
} else { |
|||
const secretRes = await models.SecretYingshi.findOne({ |
|||
where: { key, secret } |
|||
}) |
|||
if (secretRes && secretRes.expire && secretRes.token && moment().isBefore(moment(secretRes.expire))) { |
|||
return secretRes.token |
|||
} |
|||
} |
|||
|
|||
// 也可以做基于 redis 的缓存
|
|||
const tokenRes = await app.fs.yingshiRequest.post(`lapp/token/get`, { |
|||
query: { |
|||
appKey: key, |
|||
appSecret: secret |
|||
} |
|||
}) |
|||
if (tokenRes.code == 200) { |
|||
const { accessToken, expireTime } = tokenRes.data |
|||
await models.SecretYingshi.update({ |
|||
token: accessToken, |
|||
expire: expireTime |
|||
}, { |
|||
where: { |
|||
key, secret |
|||
} |
|||
}) |
|||
return accessToken |
|||
} else { |
|||
throw tokenRes |
|||
} |
|||
} |
|||
|
|||
return { |
|||
token4yingshi |
|||
} |
|||
} |
Loading…
Reference in new issue