Nuxt.js自定义角色中间件在页面刷新时不起作用



我有一个简单的应用程序,如果连接的用户不是管理员,则需要保护一些页面。

我使用nuxt/auth包来处理身份验证:

auth: {
strategies: {
local: {
scopeKey: 'roles',
token: {
property: 'access_token',
type: 'Bearer',
name: 'Authorization',
},
user: {
property: 'user',
},
endpoints: {
login: {url: '/api/auth/login', method: 'post'},
// logout: { url: '/api/auth/logout', method: 'post' },
user: {url: '/api/auth/me', method: 'get'}
}
},
},
redirect: {
login: '/',
logout: '/',
callback: '/housing',
home: '/home'
},
plugins: [
'~/plugins/auth.js',
]
},

这工作得很好,但我在实现中间件时遇到了问题。因此,如果用户没有ROLE_ADMIN角色,我想将他们重定向到主页

export default function ({app, $auth, $axios}) {
if (!$auth.user.roles.includes('ROLE_ADMIN')) {
console.log("unauthorized");
app.router.push(app.localePath('home'));
}
}

我在我想要的页面上使用中间件。例如,当用户登录并转到管理页面而不刷新页面时,它可以完美地工作。

但是,如果他们去刷新页面或使用直接URL,在被我的中间件重定向到主页后,nuxt/auth会立即将我的用户重定向到";未经授权的";页

为什么会有这种行为?

很抱歉上次回答不好。这是一个新的。

在硬刷新或从搜索栏移动到URL的情况下(同样的事情(,你会失去所有状态,你的应用程序会再次从头开始加载。此时,您将再次执行所有的中间件。

这是文档页面的报价

中间件将按以下顺序串行执行:

  • nuxt.config.js(按文件中的顺序(
  • 匹配的布局
  • 匹配的页面

因此,您将再次执行auth(@nuxt/auth(中间件,然后执行您自己的自定义中间件。现在,如果你不保存用户的信息(在硬刷新之前成功登录的用户(,身份验证模块将不知道你是谁,因此会提示你再次登录。

到目前为止,这里没有任何异常。


以下是关于如何通过硬刷新保持数据的答案的链接:https://stackoverflow.com/a/66872372/8816585

简单的答案是:禁用auth/next登录的重定向,并在您自己的上处理它

redirect: {
login: false,
logout: '/',
callback: '/housing',
home: '/home'
},

如果你不禁用它,它总是会在登录后将页面重定向到主页

最新更新