nodeJSとexpressでポートフォリオアプリケーションを作成しています。スキル、経験などを作成、削除、更新、編集できる管理パネルを実装したいのですが、それらの管理ルートを秘密に保つ方法と、どのような認証を行うことができるかわかりません。 post、patch、deleteルートに基本認証を設定してから、ルートに基本認証を実装する方法を説明します。
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)
});
スキル.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;
コメントで指定されているように、私はあなたのコードを少しリファクタリングします、厄介なようです、そしてあなたはルートをインポートするすべての行を繰り返すので、あなたもそれをもっとうまくやるべきです...
他のStackOverflowの質問のために作成したデモリポジトリのコンテンツを含むindex.js
ファイルを/routers
フォルダーに入れます
次に、物事を分離するために、私は次のようなことをします:
const routes = require('./routes')
...
const protectRouteWithApiKey = (req, res, next) => {
const auth = req.headers['x-apikey']
if (auth && auth === '<YOUR API KEY>') return next()
return next(new Error('403 | Authorization is missing or value is wrong'))
}
...
app.use('/api', protectRouteWithApiKey, routes) // point to your routes and protect access
app.use('/', defaultEngine) // your engine to render html
そうすれば、保護されたルート/api/*
と他のすべての通常のルートができます
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加