Yus*_*aad -1 typescript reactjs next.js prisma next-auth
我目前正在尝试将 next-auth 与 google 提供商一起使用,并将 prisma 与我的下一个 js 应用程序一起使用,但我收到此错误:
Detected default export in '/MyProject/foodbrain/app/api/auth/[...nextauth]/route.ts'. Export a named export for each HTTP method instead.
Run Code Online (Sandbox Code Playgroud)
随着:
No HTTP methods exported in 'MyProject/foodbrain/app/api/auth/[...nextauth]/route.ts'. Export a named export for each HTTP method.
Run Code Online (Sandbox Code Playgroud)
我的route.ts文件:
import { PrismaAdapter } from "@next-auth/prisma-adapter";
import { PrismaClient } from "@prisma/client";
import NextAuth from "next-auth";
import GoogleProvider from "next-auth/providers/google";
const prisma = new PrismaClient();
export default NextAuth({
adapter: PrismaAdapter(prisma),
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
}),
],
});
Run Code Online (Sandbox Code Playgroud)
我在 .env.local 中设置了 GOOGLE_CLIENT_ID 和 GOOGLE_CLIENT_SECRET 变量,我只是不想将它们放在这里,因为它们应该保密。
我的 Login.tsx 文件:
"use client";
import { signIn } from "next-auth/react";
export default function Login() {
return (
<nav className="flex justify-end">
<button
className="text-black cursor-pointer underline text-lg p-6 hover:text-gray-600"
onClick={() => signIn()}
>
Sign In
</button>
</nav>
);
}
Run Code Online (Sandbox Code Playgroud)
我的 Nav.tsx 文件:
import Login from "./Login";
export default function Navigation() {
return (
<nav className="flex justify-end">
<Login />
</nav>
);
};
Run Code Online (Sandbox Code Playgroud)
我的 Prisma 架构:
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Account {
id String @id @default(cuid())
userId String
type String
provider String
providerAccountId String
refresh_token String? @db.Text
access_token String? @db.Text
expires_at Int?
token_type String?
scope String?
id_token String? @db.Text
session_state String?
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([provider, providerAccountId])
}
model Session {
id String @id @default(cuid())
sessionToken String @unique
userId String
expires DateTime
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model User {
id String @id @default(cuid())
name String?
email String? @unique
emailVerified DateTime?
image String?
accounts Account[]
sessions Session[]
}
model VerificationToken {
identifier String
token String @unique
expires DateTime
@@unique([identifier, token])
}
Run Code Online (Sandbox Code Playgroud)
有谁知道我做错了什么?我已经研究这个问题有一段时间了,我似乎无法弄清楚,并且在网上找不到好的答案。任何帮助表示赞赏。
我通过改变这个解决了这个问题:
export default NextAuth({
adapter: PrismaAdapter(prisma),
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
}),
],
});
Run Code Online (Sandbox Code Playgroud)
对此:
const handler = NextAuth({
adapter: PrismaAdapter(prisma),
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
}),
],
});
export { handler as GET, handler as POST };
Run Code Online (Sandbox Code Playgroud)
https://next-auth.js.org/configuration/initialization#route-handlers-app
| 归档时间: |
|
| 查看次数: |
2755 次 |
| 最近记录: |