nuxt.js - Nuxt - 防止直接访问页面目录 url
问题描述
这是我的 Nuxt 的页面结构:
pages/
users.vue
users/
login.vue
register.vue
forgot-password.vue
我已将布局和中间件设置users.vue
为在其子页面中通用。
我不希望任何人直接访问users
页面 url,当有人输入时example.com/users
,我希望它返回 404 错误。
我只希望它的子页面可以访问。( example.com/users/login
& ...)
我能做什么?
谢谢
解决方案
为获得最佳实践,请先不要直接使用 url 名称试试这个
pages/
users/
index.vue //this will your user.vue
login
index.vue
register
index.vue
forgot-password
index.vue
现在制作一个中间件 guest.js
来宾.js
export default function({ app, redirect }) {
if (app.$auth.loggedIn) {
return redirect('/');
}
}
将此添加到登录页面
middleware: 'guest'
这将检查用户是否已经登录重定向,'/'
或者您可以编辑到任何
nuxt auth 模块 使默认 auth 模块
只需将其用于用户页面
middleware: 'auth'
或者您可以使用 make new middleware 作为名称进行自定义auth.js
export default function({ app, redirect }) {
if (!app.$auth.loggedIn) {
return redirect('/login');
}
}
让我们看看 404 页面
您可以制作静态页面,/users
但最佳做法是制作动态路由/username
所以你的数据结构看起来像这样
pages/
_username
index.vue // Dynamic Route
users/
index.vue //this will your user.vue
login
index.vue
register
index.vue
forgot-password
index.vue
现在在您的 _username 页面中
<template></template>
<script>
export default {
asyncData({ $axios, params, error }) {
return $axios
.get(`/user/${params.username}`)
.then(res => {
return { user: res.data.data };
})
.catch(e => {
error({ statusCode: 404, message: 'Page not found' });
});
},
};
</script>
<style>
</style>
希望这可以帮助
推荐阅读
- javascript - HTML 5(轨道元素)- Youtube 上未显示字幕
- android - 有什么方法可以将我的应用程序发送给其他人以下载 apk 文件而不在商店中部署它?
- java - 在存储和访问来自另一个类的数组时,出现“java.lang.NullPointerException:尝试从空数组读取”错误
- c# - Xamarin.iOS:Firebase 推送通知不起作用
- r - 使用 if 语句替换列中的 NA 值
- r - R mschart 预定义折线图的颜色
- matlab - 从matlab中的不同目录读取文件
- python - 为 754 个光谱构建 3D 阵列
- java - @Autowired 打破了 junit 测试
- angular - 尝试 *ngFor 一个 Json 对象时出错