69 lines
1.8 KiB
JavaScript
69 lines
1.8 KiB
JavaScript
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] : '';
|
|
}
|