希望获得有关 Vercel 部署的一些帮助。我创建了一个 _middleware.ts 文件,用于检查用户 cookie 中的 JWT。
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'
import { JwtPayload, verify } from 'jsonwebtoken'
export async function middleware(req: NextRequest) {
let response = NextResponse.next()
const url = req.nextUrl.clone()
const token = req.cookies['allow-list']
if (!token || token === 'deleted') {
return response
}
try {
const decodedToken = verify(
token,
process.env.TOKEN_SECRET as string
) as JwtPayload
} catch (e) {}
return response
}
Run Code Online (Sandbox Code Playgroud)
但是,正因为如此,当我尝试构建项目时,出现以下错误:“中间件页面/_middleware 中不允许动态代码评估(例如“eval”、“新函数”)”。有没有解决的办法?当我在本地运行它时它有效。
[22:59:29.409] Cloning …Run Code Online (Sandbox Code Playgroud) 在以太坊文档中,它说两个最常见的签名者是:
Wallet,这是一个知道其私钥并可以用它执行任何操作的类。
JsonRpcSigner,连接到 JsonRpcProvider (或子类)并使用 getSigner 获取
我无法理解的是,当提供者是 web3provider(即 MetaMask)时,如何创建 JsonRpcSigner。难道 web3provider 不知道它的私钥,因此应该在provider.getSigner()运行时返回一个钱包吗?
为什么要使用iron-session而不是next-auth?除了社交之外,next-auth 是否不执行正常的用户名/密码登录(而iron-session 只执行前者)?
我当前的代码如下,它遵循 Next.js 每页getLayout的教程(请参阅 TypeScript 部分)和带有 TypeScript 的NextAuth(或者我应该说,尝试遵循...):
import "../styles/globals.css";
import type { AppProps } from "next/app";
import { SessionProvider } from "next-auth/react";
import { Session } from "next-auth";
import Header from "components/Header";
import { ReactElement, ReactNode } from "react";
import { NextPage } from "next";
type NextPageWithLayout<P = {}, IP = P> = NextPage<P, IP> & {
getLayout?: (page: ReactElement) => ReactNode;
};
type AppPropsWithLayout = AppProps & {
Component: NextPageWithLayout;
};
function MyApp({ Component, pageProps …Run Code Online (Sandbox Code Playgroud) 我有一个 NextJS 项目,它使用 NextAuth 进行会话管理,然后使用 React Query 来检索前端数据。
但是,使用当前格式(如下所示), useSession() 将undefined在检查会话是否已通过身份验证时返回,然后undefined在reactQuery中使用它,它本身将返回undefined. 如何确保仅在成功检索会话并包含 userID 之后才调用 useQuery,然后将其传递给 useQuery?
const AirdropsPage = () => {
const { data: session } = useSession();
const { isLoading, isError, data } = useQuery(["airdropsData"], () =>
fetch(`/api/airdrops?id=${session?.user?.id}`).then((res) => res.json()) //id is undefined
);
return (
{isLoading ? (
<Loader />
) : data ? (
<Table data={data.airdrops} columns={columns} />
) : null}
);
};
Run Code Online (Sandbox Code Playgroud) next.js ×4
next-auth ×3
ethereum ×1
ethers.js ×1
javascript ×1
node.js ×1
react-query ×1
reactjs ×1
session ×1
typescript ×1
vercel ×1