0
点赞
收藏
分享

微信扫一扫

2022-01-05 服务端登录校验(中间件)

搬砖的小木匠 2022-01-05 阅读 54

auth.js

module.exports = options => {
	const jwt = require('jsonwebtoken')
	const assert = require('http-assert')
	const AdminUser = require('../models/AdminUser')

	return async (req, res, next) => {
		const token = String(req.headers.authorization || '').split(' ').pop()
		assert(token, 401, '请先登录')
		const { id } = jwt.verify(token, req.app.get('secret'))
		assert(id, 401, '请先登录')
		req.user = await AdminUser.findById(id)
		assert(req.user, 401, '请先登录')
		await next()
	}
}

resource.js

module.exports = options => {
	return async (req, res, next) => {
		const modelName = require('inflection').classify(req.params.resource)
		req.Model = require(`../models/${modelName}`)
		next()
	}
}

routes.js

const authMiddleware = require('../../middleware/auth')
const resourceMiddleware = require('../../middleware/resource')

app.use('/admin/api/rest/:resource', authMiddleware(), resourceMiddleware(), router)

app.post('/admin/api/upload', authMiddleware(), upload.single('file'), async (req, res) => {
	const file = req.file
	file.url = `http://localhost:3000/uploads/${file.filename}`
	res.send(file)
})
举报

相关推荐

0 条评论