短报文教学
This commit is contained in:
88
app/service/home.js
Normal file
88
app/service/home.js
Normal file
@@ -0,0 +1,88 @@
|
||||
'use strict';
|
||||
|
||||
const BaseService = require('../core/base_service.js');
|
||||
|
||||
const sha256 = require("crypto-js/sha256");
|
||||
|
||||
const fileName = "home";
|
||||
|
||||
class HomeService extends BaseService {
|
||||
// token 状态查询接口
|
||||
async tokenStatus(uid) {
|
||||
const { ctx } = this;
|
||||
const redis = ctx.app.redis;
|
||||
try {
|
||||
let result = {};
|
||||
const tokenUser = await redis.get('db4').get(uid);
|
||||
if (!tokenUser) {
|
||||
const where = { user_uid: uid };
|
||||
const attributes = ['token'];
|
||||
result.remainder = false;
|
||||
result.token = await ctx.model.BuserToken.findOne({ attributes, where });
|
||||
result.type = result.token == null ? 'none' : "long";
|
||||
} else {
|
||||
result.remainder = await redis.get('db4').ttl(uid);
|
||||
result.token = JSON.parse(tokenUser).token;
|
||||
result.type = JSON.parse(tokenUser).lifeHold ? "lifeHold" : "short";
|
||||
}
|
||||
const token = await redis.get('db4').get(result.token);
|
||||
if(token) {
|
||||
result.attacksMark = JSON.parse(token).attacksMark;
|
||||
result.banAt = result.attacksMark ? JSON.parse(token).banAt : 0;
|
||||
}
|
||||
return result ? result : false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "tokenStatus";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 用户获取短期 token 的接口
|
||||
async getUserToken(uid) {
|
||||
const { ctx } = this;
|
||||
const redis = ctx.app.redis;
|
||||
try {
|
||||
const token = this.shaForm(uid, this.generateRandomString());
|
||||
const checkUser = await redis.get('db4').get(uid);
|
||||
let tokenUser, tokenMark;
|
||||
if (!checkUser) {
|
||||
const where = { user_uid: uid };
|
||||
const attributes = ['token'];
|
||||
const result = await ctx.model.BuserToken.findOne({ attributes, where });
|
||||
if (result == null) {
|
||||
// 设置过期时间为一周
|
||||
tokenUser = await redis.get('db4').set(uid, JSON.stringify({ token, lifeHold: false }), 'EX', 604800);
|
||||
tokenMark = await redis.get('db4').set(token, JSON.stringify({ uid, attacksMark: false }), 'EX', 604800);
|
||||
}
|
||||
}
|
||||
return tokenUser && tokenMark ? true : false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "getUserToken";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
|
||||
// 用户延续短期 token 有效时间的接口
|
||||
async lifeHold(uid) {
|
||||
const { ctx } = this;
|
||||
const redis = ctx.app.redis;
|
||||
try {
|
||||
const user = await redis.get('db4').get(uid);
|
||||
let tokenUser, tokenMark;
|
||||
if (!JSON.parse(user).lifeHold) {
|
||||
let ex = await redis.get('db4').ttl(uid) + 604800;
|
||||
tokenUser = await redis.get('db4').set(uid, JSON.stringify({ token: JSON.parse(user).token, lifeHold: true }), 'EX', ex);
|
||||
tokenMark = await redis.get('db4').expire(JSON.parse(user).token, ex);
|
||||
}
|
||||
return tokenUser && tokenMark ? true : false;
|
||||
} catch (error) {
|
||||
const blockName = fileName + "--" + "lifeHold";
|
||||
ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
|
||||
return 'error';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = HomeService;
|
||||
Reference in New Issue
Block a user