import jwt from 'jsonwebtoken'; import config from '../../config/config'; import { LdapUser } from '../models/admin/User'; import { combPer, combRole } from '../utils/comb-permissions'; export default function(req, res, next) { const BearerToken = req.headers.authorization; if (!BearerToken) { // 无权限 res.send({ errcode: 1, errmsg: '用户无权限。' }); } else { const token = getToken(BearerToken); if (!token) { // 异常 res.send({ errcode: 1, errmsg: 'token 异常。' }); } else { jwt.verify(token, config.jwtSecret, async (err, decode) => { if (err) { // 验证不通过 res.send({ errcode: 1, errmsg: err.message }); } else { // 验证通过 // 获取用户信息 try { const username = decode.username; const searchResult = await LdapUser.findOne({ uid: username }) .populate({ path: 'userInfo', populate: { path: 'permissions' } }) .exec(); if (!searchResult) { res.send({ errcode: 1, errmsg: '用户信息发生异常。' }); } else { let permissions = [...searchResult.userInfo.permissions]; permissions = combPer(permissions); const userInfo = JSON.parse(JSON.stringify(searchResult)); req.user = userInfo.userInfo; next(); } } catch (err) { next(err); } } }); } } } function getToken(str) { const reg = /^Bearer (.+)/; const result = reg.exec(str); return result ? result[1] : ''; }