我想在我的中间件中调用我的tRPC过程来重定向那些已经授权但还没有注册的用户(在我的数据库中)。现在我显然不能在这里使用useQuery,因为它不是一个react组件,但我也不能只编写一个API路由,我可以调用并传递prisma,因为中间件位于前端和后端。出于明显的安全原因,您不能在前端使用Prisma客户端。所以我有点卡住了,我相信这将是一个简单的一行从这里的人!
import { getAuth, withClerkMiddleware } from "@clerk/nextjs/server";
import { type NextRequest, NextResponse } from "next/server";
import { api } from "./utils/api";
import { appRouter } from "./server/api/root";
import { prisma } from "./server/db";
export default withClerkMiddleware(async (req: NextRequest, opts) => {
const { userId } = getAuth(req);
if (userId) {
// Fetch user data from your TRPC client (Replace this with your actual API call)
const user = api.ptusers.getOne({id: userId}).useQuery()
// If user doesn't exist in your database, redirect to sign up page
if (!user) {
return NextResponse.redirect("/sign-up");
}
}
return NextResponse.next();
});
// Stop Middleware running on static files
export const config = {
matcher: "/((?!_next/image|_next/static|favicon.ico|bg-signup.jpg).*)",
};
1条答案
按热度按时间vulvrdjw1#
你可以使用
createTRPCProxyClient
来做客户端调用而不使用钩子,检查docs来学习如何设置客户端。您也可以使用caller API,caller api docs直接从服务器调用您的过程。
我不确定,但用
query
替换userQuery
可能会完成工作,或者请尝试上述任何解决方案。不要担心从中间件函数进行服务器端调用,它不会包含在您的包中,而是在远离客户端的地方执行。