【问题标题】:Nuxt middleware creating infinite redirectsNuxt 中间件创建无限重定向
【发布时间】:2018-12-16 22:32:06
【问题描述】:

我有一个中间件,它检查用户在哪个注册步骤,并基于此将用户重定向到相应的页面。这是我的中间件代码:

export default function ({app, redirect, route}) {
    let auth = app.$auth;
    console.log('step checks middleware');

    if(auth.loggedIn) {
        console.log('[StepChecks Middleware][Info] User logged in');
        console.log(`[StepChecks Middleware][Info] User step completed ${auth.user.step_completed}`);

        if(auth.user.step_completed === '1') {
            console.log(`[StepChecks Middleware][Info] Should be redirected to '/registration/2'`);
            if(route.fullPath === '/registration/2') {
                console.log(`[StepChecks Middleware][Info] Routing to /registration/2. No redirect.`);
            } else {
                console.log(`[StepChecks Middleware][Info] Should be redirected to /registration/2.`);
                return redirect('/registration/2');
            }
        }

        if(auth.user.step_completed === '3') {
            console.log(`[StepChecks Middleware][Info] Should be redirected to '/registration/3'`);
            if(route.fullPath === '/registration/3') {
                console.log(`[StepChecks Middleware][Info] Routing to /registration/3. No redirect.`);
            } else {
                console.log(`[StepChecks Middleware][Info] Should be redirected to /registration/3.`);
                return redirect('/registration/3');
            }
        }

    }
}

但这会造成无限循环的重定向。

输出

================= Step checks middleware ==================  
[StepChecks Middleware][Info] User logged in  
[StepChecks Middleware][Info] User step completed 1  
[StepChecks Middleware][Info] Should be redirected to '/registration/2'  
[StepChecks Middleware][Info] Should be redirected to /registration/2.  
  nuxt:render Rendering url /registration/2 +2s  
Making request to /api/me  
Making request to /api/web/interest_categories  
================= Step checks middleware ==================  
[StepChecks Middleware][Info] User logged in  
[StepChecks Middleware][Info] User step completed 1  
[StepChecks Middleware][Info] Should be redirected to '/registration/2'  
[StepChecks Middleware][Info] Routing to /registration/2. No redirect.  
  nuxt:render Rendering url / +1s  
Making request to /api/me  
Making request to /api/web/interest_categories  
================= Step checks middleware ==================  
[StepChecks Middleware][Info] User logged in  
[StepChecks Middleware][Info] User step completed 1  
[StepChecks Middleware][Info] Should be redirected to '/registration/2'  
[StepChecks Middleware][Info] Should be redirected to /registration/2.  
  nuxt:render Rendering url /registration/2 +1s  
Making request to /api/me  
Making request to /api/web/interest_categories  
================= Step checks middleware ==================  
[StepChecks Middleware][Info] User logged in  
[StepChecks Middleware][Info] User step completed 1  
[StepChecks Middleware][Info] Should be redirected to '/registration/2'  
[StepChecks Middleware][Info] Routing to /registration/2. No redirect.  
  nuxt:render Rendering url / +1s  
Making request to /api/me  
Making request to /api/web/interest_categories  
================= Step checks middleware ==================  
[StepChecks Middleware][Info] User logged in  
[StepChecks Middleware][Info] User step completed 1  
[StepChecks Middleware][Info] Should be redirected to '/registration/2'  
[StepChecks Middleware][Info] Should be redirected to /registration/2.  
  nuxt:render Rendering url /registration/2 +1s  
Making request to /api/me  
Making request to /api/web/interest_categories  
================= Step checks middleware ==================  
[StepChecks Middleware][Info] User logged in  
[StepChecks Middleware][Info] User step completed 1  
[StepChecks Middleware][Info] Should be redirected to '/registration/2'  
[StepChecks Middleware][Info] Routing to /registration/2. No redirect.  
  nuxt:render Rendering url / +1s  
Making request to /api/me  
Making request to /api/web/interest_categories  
================= Step checks middleware ==================  
[StepChecks Middleware][Info] User logged in  
[StepChecks Middleware][Info] User step completed 1  
[StepChecks Middleware][Info] Should be redirected to '/registration/2'  
[StepChecks Middleware][Info] Should be redirected to /registration/2.  
  nuxt:render Rendering url /registration/2 +1s  
Making request to /api/me  
Making request to /api/web/interest_categories  
================= Step checks middleware ==================  
[StepChecks Middleware][Info] User logged in  
[StepChecks Middleware][Info] User step completed 1  
[StepChecks Middleware][Info] Should be redirected to '/registration/2'  
[StepChecks Middleware][Info] Routing to /registration/2. No redirect.  
  nuxt:render Rendering url / +1s  
Making request to /api/me  
Making request to /api/web/interest_categories  
================= Step checks middleware ==================  
[StepChecks Middleware][Info] User logged in  
[StepChecks Middleware][Info] User step completed 1  
[StepChecks Middleware][Info] Should be redirected to '/registration/2'  
[StepChecks Middleware][Info] Should be redirected to /registration/2.  
  nuxt:render Rendering url /registration/2 +1s  
Making request to /api/me  
Making request to /api/web/interest_categories  
================= Step checks middleware ==================  
[StepChecks Middleware][Info] User logged in  
[StepChecks Middleware][Info] User step completed 1  
[StepChecks Middleware][Info] Should be redirected to '/registration/2'  
[StepChecks Middleware][Info] Routing to /registration/2. No redirect.  

这样下去。我无法弄清楚为什么会发生这个问题。最初我没有检查当前路径检查if(route.fullPath === '/registration/2'),在这种情况下,其余页面工作正常,但从注册页面导航到/registration/2,它正在创建无限循环的重定向。

【问题讨论】:

  • 您发布的代码中似乎没有问题。看起来其他地方的东西重定向到 / 。你在使用@nuxt/auth 模块吗?
  • @Aldarund 是的。事实上,问题似乎来自 @nuxt/auth 的中间件。这是重定向到/来自/registration/2。现在我已经删除了它并手动检查用户是否在挂载的钩子上进行了身份验证。知道为什么会发生/
  • 哪个版本的nuxt auth?它只发生在 Firefox 或 chrome 中吗?
  • @Aldarund,在 Firefox 和 chrome 上。我使用的是 4.5.1 版
  • 我现在也体验过,..你有没有更新解决这个@SayantanDas

标签: vue.js nuxt.js


【解决方案1】:

这里有点晚了,但无论如何。

我遇到了同样的问题,我花了好几个小时寻找答案。

我对这个问题的解决方案是添加一个

if (process.server) { ... }

阻止我的中间件函数,因为在docs 中声明“由于水合错误,无法在客户端 Nuxt 插件中使用重定向或错误”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-19
    • 2021-01-19
    • 2022-07-28
    • 2021-10-14
    • 2021-12-22
    • 2021-04-14
    • 1970-01-01
    • 2018-07-17
    相关资源
    最近更新 更多