UNPKG

@hosoft/restful-api-framework

Version:

Base framework of the headless cms HoServer provided by http://helloreact.cn

78 lines (65 loc) 2.27 kB
/** * HoServer API Server Ver 2.0 * Copyright http://hos.helloreact.cn * * create: 2018/11/15 **/ const _ = require('lodash') const config = require('@hosoft/config') const jwt = require('jsonwebtoken') const { BaseHelper, CacheManager, ErrorCodes } = require('../../base') const { User } = require('../../models') // const paginationKeys = ['page', 'page_size', 'offset', 'sort'] /** * parse the http request, save all POST/GET parameters to context */ const before = async (context) => { const req = context.req const body = req.body const query = req.query if (query.limit) { query.page_size = query.limit } if (query.page) { query.page = query.page / 1 } if (query.offset) { query.offset = query.offset / 1 } if (query.page_size) { query.page_size = query.page_size / 1 } context.body = body context.query = query context.params = req.params // parse user info from token const token = req.headers.token || req.query.token || req.body.token if (token && token !== 'undefined') { try { const decoded = await jwt.verify(token, config.get('jwt.secret')) context.currentUserId = decoded.id let userInfo = await CacheManager.getCache('UserInfo', decoded.id) if (!userInfo) { userInfo = await User.findOne({ user_id: context.currentUserId }) await BaseHelper.getServiceInst('UserService').setUserRolePermission(userInfo) await CacheManager.setCache('UserInfo', decoded.id, userInfo, 600) // expire after 10 minutes } context.currentUser = userInfo } catch (err) { logger.error('decode user token error: ' + token, err) /* { name: 'TokenExpiredError', message: 'jwt expired', expiredAt: 1408621000 } */ const api = _.get(context, ['apiRoute', 'api']) if (err instanceof jwt.JsonWebTokenError && api.open !== true) { return Promise.reject({ message: tf('errTokenExpire'), code: ErrorCodes.USER_ERR_TOKEN_EXPIRE }) } } } } module.exports = { before: before }