| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- module.exports = (options, app) => {
- return async function wechatAuth2(ctx, next) {
- const traceId = ctx.logId ||
- `${Date.now()}-${Math.random().toString(16).slice(2)}`;
- const startTime = Date.now();
- ctx.logger.warn(
- '[WEAPP_TRACE] id=%s start method=%s url=%s',
- traceId,
- ctx.method,
- ctx.originalUrl
- );
- const token =
- ctx.headers.authorization &&
- ctx.headers.authorization.replace('Bearer ', '');
- const code = ctx.headers['platform-code'];
- if (!token || !code) {
- ctx.logger.warn(
- '[WEAPP_TRACE] id=%s auth_failed reason=missing_token_or_code cost=%dms',
- traceId,
- Date.now() - startTime
- );
- ctx.body = {
- code: 2,
- msg: '请登录',
- data: null,
- };
- return;
- }
- try {
- const decoded = jwt.verify(
- token,
- weappConfig.jwtSecret
- );
- ctx.logger.warn(
- '[WEAPP_TRACE] id=%s jwt_done cost=%dms',
- traceId,
- Date.now() - startTime
- );
- const projectData =
- await ctx.service.project.getProjectByCode(
- code.trim()
- );
- ctx.logger.warn(
- '[WEAPP_TRACE] id=%s project_done cost=%dms',
- traceId,
- Date.now() - startTime
- );
- if (projectData === null) {
- throw '不存在项目数据';
- }
- const projectAccount =
- await ctx.service.projectAccount.getDataByCondition({
- weapp_openid: decoded.openid,
- project_id: projectData.id,
- enable: 1,
- });
- ctx.logger.warn(
- '[WEAPP_TRACE] id=%s account_done cost=%dms',
- traceId,
- Date.now() - startTime
- );
- if (!projectAccount) {
- throw '账号不存在或未启用';
- }
- ctx.session.sessionUser = {
- ...projectAccount,
- accountId: projectAccount.id,
- };
- ctx.session.sessionProject = projectData;
- } catch (error) {
- ctx.logger.error(
- '[WEAPP_TRACE] id=%s auth_error url=%s cost=%dms',
- traceId,
- ctx.originalUrl,
- Date.now() - startTime,
- error
- );
- if (error.name === 'TokenExpiredError') {
- ctx.body = {
- code: 2,
- msg: '登陆凭证过期,请重新登陆',
- data: null,
- };
- return;
- }
- ctx.body = {
- code: -1,
- msg: error.toString() || '请登录',
- data: null,
- };
- return;
- }
- ctx.logger.warn(
- '[WEAPP_TRACE] id=%s auth_done controller_start cost=%dms',
- traceId,
- Date.now() - startTime
- );
- try {
- await next();
- } finally {
- ctx.logger.warn(
- '[WEAPP_TRACE] id=%s request_end status=%s cost=%dms url=%s',
- traceId,
- ctx.status,
- Date.now() - startTime,
- ctx.originalUrl
- );
- }
- };
- }
|