'use strict'; const weappConfig = require('../const/weapp'); const jwt = require('jsonwebtoken'); module.exports = (options, app) => { return async function wechatAuth(ctx, next) { const token = ctx.headers.authorization && ctx.headers.authorization.replace('Bearer ', ''); const code = ctx.headers['platform-code']; if (!token || !code) { ctx.body = { code: 2, msg: '请登录', data: null }; return; } try { const decoded = jwt.verify(token, weappConfig.jwtSecret); const projectData = await ctx.service.project.getProjectByCode( code.trim() ); if (projectData === null) { throw '不存在项目数据'; } const projectAccount = await ctx.service.projectAccount.getDataByCondition({ wx_openid: decoded.openid, project_id: projectData.id, enable: 1, }); if (!projectAccount) { throw '账号不存在或未启用'; } ctx.session.sessionUser = { ...projectAccount, accountId: projectAccount.id }; ctx.session.sessionProject = projectData; } catch (error) { if (error.name === 'TokenExpiredError') { ctx.body = { code: 2, msg: '登陆凭证过期,请重新登陆', data: null }; return; } ctx.body = { code: -1, msg: error.toString() || '请登录', data: null }; return; } await next(); }; };