
[英]Firebase auth coming as null in nuxtjs middleware on page reload
[英]Middleware on specific page - NuxtJS
好吧,我从 nuxt 开始,我有以下路线:
/home
/dashboard
/login
我想保护/dashboard
,但仅适用于使用 Cookie 中的令牌登录的用户。
然后我创建了一个中间件
/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' }
}
}
因此,您仍然可以从预渲染中间件系统中受益。
您可能已经在您的nuxt.config.js
注册了您的middleware/auth.js
nuxt.config.js
。 当您在nuxt.config.js
注册中间件时,您是在全局注册它,这意味着每次路由更改都会调用它。
在我看来,你应该称它们为plugin
,因为每个路由调用的中间件发生了变化,你也不能在布局和子组件中使用中间件,你可以将它用作plugin
并在任何地方手动调用它,它也是反应式和运行时。
path: /plugind/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'
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.