In Nuxt.js how do you restrict some routes only to clients with a valid JWT token?(在Nuxt.js中,如何将某些路由仅限于具有有效JWT令牌的客户端?)
问题描述
在Nuxt.js中,这是实现身份验证的一种方式:
- 客户端通过向Nuxt后端的API路由发送带有凭据的HTTP请求进行认证;
- Nuxt后端响应JWT token,允许客户端访问受保护的路由;
- 最后,当经过身份验证的用户尝试访问这样的路由时,他们向Nuxt后端发出HTTP请求,并将其JWT令牌插入标头;
- 后端验证JWT令牌,并向客户端响应请求的页面JSON数据。
我不明白的是,如何让Nuxt后端知道,对于某些受保护的路由,它必须在提供页面JSON数据之前检查客户端的JWT令牌。我的意思是,Nuxt中的确切位置我可以实现这种验证吗?
推荐答案
嗯,我有点困惑,首先你说api data,另一句话你说json page..但是。如果要保护页面,则需要创建中间件
中间件/auth.js
export default async function ({ store, $axios, redirect }) {
let valid = await $axios.$post('/api/checktoken')
if (!valid) {
redirect('/')
}
}
您需要创建一个API来检查令牌。通常,您需要将令牌放入标题中,如Authentication: Bearer token...
,而我只是将令牌保存在cookie中。因为如果您向服务器发送HTTP请求,cookie会自动发送该请求,因此我不需要做一些额外的工作。
下一步是转到某个页面并设置您的中间件身份验证。
page.vue
<script>
export default {
middleware: "auth"
}
</script>
但是,如果您想保护一些后端路由,可以这样做。重新创建中间件
async authenticate(req, res, next) {
let token = await cookieService.getTokenFromCookie(req)
if (!token) return errorService.resError(res, 400, 'Authorization failed')
let tokenValid = await tokenService.verifyToken(token)
if (!tokenValid)
return errorService.resError(res, 400, 'Authorization failed')
let decodedData = tokenService.decode(token)
if (!decodedData)
return errorService.resError(res, 400, 'Authorization failed')
res.locals.userId = decodedData.userId
res.locals.role = decodedData.role
next()
}
在这种情况下,您基本上需要从Cookie中读取令牌。(如果您不使用cookie,则需要从标头中读出它,因此您应该创建一个从标头中读出令牌的函数)
检查Token是否在那里。
验证令牌是否有效。
解码令牌,以便您可以访问其中的数据
现在您还可以将数据放到您的res.locals
中。优点在于,此数据的作用域为当前请求,您可以在下一个中间件/终结点中访问它。
然后调用next()
转到下一个中间件/端点
function endpoint(req, res) {
let { userId, role } = res.locals
do something....
}
因此路由如下所示:
app.use("/some/api/point", authenticate, endpoint)
好处是您可以在要保护的每个API路由中放置authenticate
。
这篇关于在Nuxt.js中,如何将某些路由仅限于具有有效JWT令牌的客户端?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在Nuxt.js中,如何将某些路由仅限于具有有效JWT令牌的客户端?


- 如何向 ipc 渲染器发送添加回调 2022-01-01
- 为什么我的页面无法在 Github 上加载? 2022-01-01
- 为什么悬停在委托事件处理程序中不起作用? 2022-01-01
- 是否可以将标志传递给 Gulp 以使其以不同的方式 2022-01-01
- 使用 iframe URL 的 jQuery UI 对话框 2022-01-01
- 在不使用循环的情况下查找数字数组中的一项 2022-01-01
- 从原点悬停时触发 translateY() 2022-01-01
- 我不能使用 json 使用 react 向我的 web api 发出 Post 请求 2022-01-01
- 如何显示带有换行符的文本标签? 2022-01-01
- 如何调试 CSS/Javascript 悬停问题 2022-01-01