Nuxt SSR应用程序使用FirebaseUI处理身份验证流。登录和注销非常有效。当我添加中间件来检查身份验证状态并在未登录的情况下重定向时,我会收到以下错误:
错误:从"/列出备忘单";至"/登录";通过导航警卫。
中间件/auth.js
export default function ({ store, redirect }) {
// If the user is not authenticated
if (!store.state.user) {
return redirect('/login')
}
}
我在应用程序中绝对找不到其他重定向。。。。
我已经挖了好几个小时了。我发现,其他出现这种错误的人没有使用Nuxt,这些解决方案都不起作用。
因为有赏金,所以不能将其标记为重复,因此后续是我在重定向时在一个Vue导航中两次回答的副本
tldr:vm.$router.push(route)
是一个承诺,需要.catch(e=>gotCaught(e))
错误
这将在下一次更改major@4
Currently@3错误是CCD_ 3还是CCD_。
vm.$router.push(to)
之后的初始预期路由应该是to
。因此,一旦有重定向,就可以预期一些失败消息在修补router.push成为承诺之前,错误被忽略,静默。当前的解决方案是在每次推送上反模式化一个.catch(...)
,或者预测设计中的更改并将其包装以暴露失败。
未来的计划将这些信息转化为结果:
let failure = await this.$router.push(to);
if(failure.type == NavigationFailureType[type]){}
else{}
Imo这个错误只是设计的,应该处理:
hook(route, current, (to: any) => { ... abort(createNavigationRedirectedError(current, route)) ...}
所以基本上,如果to
包含重定向,那就是一个错误,这有点等于将vm.$router.push
用于保护。
要忽略未处理的错误行为,可以传递一个空的onComplete(在未来版本中中断(:
vm.$router.push(Route, ()=>{})
或将其包裹在try .. catch
中
try {
await this.$router.push("/")
} catch {
}
这阻止了未捕获的抛出承诺。
在不重定向两次的情况下支持这一点意味着你将保护放在你的出口:
let path = "/"
navguard({path}, undefined, (to)=>this.$router.push(to||path))
这将阻止重定向到主页的每个组件
btwrouter-link
组件使用空的onComplete
不允许重定向两次的假设是错误的。