gpt4 book ai didi

javascript - 特定页面上的中间件 - NuxtJS

转载 作者:搜寻专家 更新时间:2023-10-30 22:50:41 25 4
gpt4 key购买 nike

好吧,我从 nuxt 开始,我有以下路线:

/home

/dashboard

/login

我想保护 /dashboard,但仅限于使用 Cookie 中的 token 登录的用户。

然后我创建了一个中间件

/middleware/auth.js

import Cookie from 'js-cookie'

export default function({ req, redirect }) {
if (process.server) {
if (!req.headers.cookie) return redirect('/login')
const jwtCookie = req.headers.cookie.split(';').find(c => c.trim().startsWith('jwt='))
if (!jwtCookie) return redirect('/login')
} else {
const jwt = Cookie.get('jwt')
if (!jwt) { window.location = '/login' }
}
}

并在我的布局或仪表板页面中注册中间件

<script>
export default {
middleware: 'auth',
}
</script>

当我访问 /dashboard 时显然运行良好

但问题是中间件是全局注册的,它运行在所有页面,所有路由

因此,当您访问作为已发布页面的 /home 时,如果您没有 cookie,您最终会被重定向到登录页面

有人帮忙吗?

最佳答案

如何根据 route.path 参数创建条件?

export default function({ req, redirect, route }) {

if (!route.path.includes('dashboard')) { // if path doesn't include "dashboard", stop there
return;
}

if (process.server) {
if (!req.headers.cookie) return redirect('/login')
const jwtCookie = req.headers.cookie.split(';').find(c => c.trim().startsWith('jwt='))
if (!jwtCookie) return redirect('/login')
} else {
const jwt = Cookie.get('jwt')
if (!jwt) { window.location = '/login' }
}
}

因此您仍然受益于预渲染中间件系统。

关于javascript - 特定页面上的中间件 - NuxtJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52246840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com