带有 Firebase 和 FirebaseUI 的 Nuxt 中间件:错误:通过导航防护从"/anything"转到"/login"时重定向



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


不允许重定向两次的假设是错误的。

相关内容

  • 没有找到相关文章

最新更新