使用 antd-admin vue版本发现退出无刷新重新登陆后会保持上一个用户的菜单。
使用 antd-admin vue版本发现退出重新登陆后会保持上一个用户的菜单。
看了下代码,发现一段这个。
`
function filterMenu(menuData, permissions, roles) {
menuData.forEach(menu => {
if (menu.meta && menu.meta.invisible === undefined) {
menu.meta.invisible = !hasAuthority(menu, permissions, roles)
if (menu.children && menu.children.length > 0) {
filterMenu(menu.children, permissions, roles)
}
}
})
`
判断invisible === undefined 然后给invisible赋值。那无刷新退出登陆后invisible自然就不存在undefined的值了,所以会保持上一次的结果。但是把invisible === undefined这个判断去掉之后 还是有问题。
估计路由里面是用是否有invisible这个值来判断是否是被服务端控制的。
所以这个问题要怎么解决呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这样的问题有两种解决办法:
方案一:location.reload刷新页面
在登录成功之后,使用location.reload()刷新一下页面,应该问题会解决。
但这种方法会影响体验感。算是有瑕疵的解决方案。
另外就是可以在退出登录或者token失效返回到login页面的时候,使用location.reload()刷新一下login页面,从而清除router缓存,重新再加载路由。这种方案应该比在登录之后跳转页面刷新体验要好一些。(针对cookie或者localstorage这种token存储方式的项目,不退出,直接关闭页面应该会有些许瑕疵)
方案二: 重置matcher
(1)在router中定义重置路由的方法
然后在退出登录logout中使用 resetRouter()重置路由。
(2)在addRoutes加载路由之前重置matcher
filterMenu方法的 menuData 是接口查询出来的吗
你可以在退出登录吧菜单设置为空
嗯,早前也遇到了这个问题,所以每次登陆操作完成之后直接重置了缓存的路由菜单.....
今天遇到这个问题,刚好解决了,分享一下。
首先按照这个路径找到tabs组件的loadCachedTabs()方法:
如果希望切换用户之后不出现任何之前打开过的tabs,那就把整个方法注释掉就ok了。但如果你想切换用户之后自动打开某一个页面,那就可以像我这么做this.$router.push('/xxxx')