vue-router - 如何在 Nuxt 中为特定路由设置中间件
问题描述
我正在尝试使用 Nuxt auth 模块保护我的 Nuxt.js 应用程序中的 api 路由。在我的 nuxt.config.js 我有:
serverMiddleware: [
{ path: '/api', handler: '~/api/index.js' }
]
我想用这个:
router: {
middleware: ['auth']
}
如何仅为不是页面组件的特定路由添加中间件?
解决方案
这不是保护 API 路由的方法。我猜你在这里使用的是 express.js 服务器。
例如:您有一个 API 端点/getUserData
。使用 express.js,它看起来像这样:
app.get("/getUserData/:user", ()=> {
res.json({
message: "I am a protected API endpoint."
});
});
为了保护这个端点,你应该创建一个中间件来检查用户是否被允许进入这个 API 端点。让我们创建一个示例。首先创建一个函数,我们称之为“auth”:
function auth(req, res, next){
let user = req.params.user;
if(user == "admin"){
next(); //This means to continue its request
}else {
res.status(403).json({ message: "Sorry, but you are not allowed }); //Status 403 means forbidden.
}
}
好的,现在我们有了一个非常简单的身份验证中间件,我们只需要将它实现到我们需要的每个 API 端点。
app.get("/getUserData/:user", auth, ()=> {
res.json({
message: "I am a protected API endpoint."
});
});
我已将auth
中间件添加到此路由以保护它。你现在可以测试它。与localhost:3000/api/getUserData/admin
你应该看到的消息。如果你选择不同的东西,admin
你会得到一个错误
推荐阅读
- php - 当我移动到另一个站点并返回时,Laravel Auth::check() 失败
- uikit - 在 iOS 12 中通过确认自动填充新密码
- reactjs - 来自查询的 React 路由的 If 语句
- node.js - 我可以在 MacOs 服务器中托管我的 angular6 Web 应用程序吗?
- mysql - 如何在 TeamSQL 中编辑或删除特定连接
- python - 向 keras 网络发送多个输入时出错
- c# - TRIPLE DES ECB 加密 RUBY
- html - 发送不带表单的文本区域
- java - 尝试生成 Cucumber 报告时出现 CucumberException
- sorting - Jenkins Pipeline Jira Plugin 排序输入参数