【问题标题】:How to unprotect route in next js middleware如何在下一个 js 中间件中取消保护路由
【发布时间】:2021-11-30 13:01:57
【问题描述】:

所以我想取消保护登录页面,这是我的文件夹结构:

这是我的中间件:

import { NextResponse, NextRequest } from "next/server";

export async function middleware(req, ev) {
  if (req.pathname === "login") {
    return NextResponse.next();
  }
  const token = req.cookies.token;

  if (!token) {
    return NextResponse.redirect("/login");
  }
  return NextResponse.next();
}

那么我该如何做才能使中间件不适用于 login.js。

编辑:现在返回[webpack.cache.PackFileCacheStrategy] Caching failed for pack: Error: Unable to snapshot resolve dependencies

这个项目的代码是here

【问题讨论】:

    标签: javascript node.js reactjs next.js middleware


    【解决方案1】:

    所以我解决了我没有从req.nextUrl 获取路径名的错误,这是正确的代码:

    import { NextResponse, NextRequest } from "next/server";
    
    export async function middleware(req, ev) {
      const { pathname } = req.nextUrl;
      const token = req.cookies.token;
    
      if (pathname == "/login" && !token) {
        return NextResponse.next();
      }
    
      if (!token) {
        return NextResponse.redirect("/login");
      }
    
      return NextResponse.next();
    }
    

    【讨论】:

      【解决方案2】:

      您可以检查request 是否用于/login 页面本身,并提前保释。

      查看NextRequest 上所有可用的属性。

      import { NextResponse, NextRequest } from "next/server";
      
      export async function middleware(req, ev) {
        if( req.pathname === 'login'){
            return NextResponse.next();
        }
        const token = req.cookies.token;
      
        if (!token) {
          return NextResponse.redirect("/login");
        }
        return NextResponse.next();
      }
      

      【讨论】:

      • 我已经添加了您的解决方案,但现在它给了我localhost redirected you too many times. 错误
      猜你喜欢
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 2018-02-09
      • 2021-09-06
      • 2015-12-17
      • 2020-02-13
      • 1970-01-01
      相关资源
      最近更新 更多