改变next.config后,甚至不调用NextJS + NextAuth中间件



我用的是next-auth@4.18.7&next@13.1.1和中间件。在我做了许多改动之后,它突然停止工作了。

middleware.ts

import { withAuth } from "next-auth/middleware";
export default withAuth({
callbacks: {
authorized({ req, token }) {
const { pathname } = req.nextUrl;
console.log(token, pathname); // this log never comes
if (pathname.startsWith("/admin")) {
return token?.roleLabel === "ADMIN" || token?.userRole === "admin";
}
// `/me` only requires the user to be logged in
return !!token;
},
},
});
export const config = {
matcher: ["/admin/:path*", "/c/:path*", "/me"],
};

next.config.js

const { i18n } = require("./next-i18next.config");
const { PHASE_DEVELOPMENT_SERVER } = require("next/constants");
module.exports = (phase) => {
let extensions = ['page.tsx', 'page.ts', 'page.jsx', 'page.js', 'api.ts', 'api.js']
if (phase === PHASE_DEVELOPMENT_SERVER) extensions.push('doc.tsx')
return {
i18n,
pageExtensions: extensions,
images: {
domains: ['domain.com'],
},
}
};

我应该重命名我的中间件吗?是到middleware.page.ts吗?这说不通啊。我试过了,但没有用。它已经在我的根/文件夹中,我尝试移动到pages/,但没有成功。

Auth在React端工作得很好,但我不能用这个中间件拦截所有受保护的页面。D:

我想分享一下我的解决方案。

在尝试了一堆东西之后,我发现next.config.js自定义页面扩展是bug背后的原因。

似乎pagextensions配置将中间件计数为页面,因此在我的情况下将其重命名为middleware.page.tsmiddleware.api.ts后使其工作。我告诉过你这说不通,但实际上是行得通的。我之前测试的时候可能漏掉了一些东西。

只要提醒middleware文件必须在根文件夹。

相关内容

  • 没有找到相关文章

最新更新