我正在使用nodeJS和express开发一个Portfolio应用程序。我想实现一个管理面板,可以创建,删除,更新和编辑我的技能,经验,关于等内容,但是我不知道如何使这些管理路由保密以及进行哪种身份验证。通过将基本身份验证放在发布,补丁,删除路由上,然后我们将如何对路由实施基本身份验证。
// index.js
const express=require('express');
const app =express();
var cors = require('cors');
require('./db/mongoose')
const menuRouter=require('./routers/menu')
const skillRouter=require('./routers/skill')
const aboutRouter=require('./routers/About')
const experienceRouter=require('./routers/Experience')
const resumerouter=require('./routers/Resume')
const userRouter=require('./routers/user')
const port=process.env.PORT||4000;
app.use(express.json());
app.use(cors());
app.use(menuRouter);
app.use(skillRouter);
app.use(aboutRouter);
app.use(experienceRouter);
app.use(resumerouter);
app.use(userRouter)
app.listen(port,()=>
{
console.log("Server is runing on port"+port)
});
// skill.js
const express=require('express');
const Skill = require('../model/skill');
const router = new express.Router();
router.post('/skill', async (req,res)=>
{
const skill = new Skill(req.body);
try
{
await skill.save();
res.status(201).send(skill);
}catch(e)
{
console.log(e);
res.status(400).send(e);
}
})
router.get('/skill',async(rq,res)=>{
try{
const skill=await Skill.find({});
res.status(201).send(skill);
}catch(e)
{
res.status(400).send(e);
}
})
module.exports=router;
用于检测登录用户是否为管理员的中间件?
在此示例中,通过电子邮件进行检查,您可以将adminemail保存为全局变量
ensureAdmin: function(req, res, next) {
if (req.isAuthenticated()) {
if (req.user.email === adminemail) {
return next();
} else {
return res.redirect('/adminsecretroute');
}
}
res.redirect('/');
}