从NextJS/Prisma向MySQL表添加userID(FK)

n3ipq98p  于 2023-08-04  发布在  Mysql
关注(0)|答案(1)|浏览(197)

我正在创建一个在线食谱网站,用户可以登录并发布他们的食谱。我正在使用NextJS,Prisma和MySQL DB。我正在使用NextAuth和凭据提供程序对用户进行身份验证,并输入用户名和密码。问题是,当我想用userID的外键约束链接我的users表和recipe表时,每个recipe都链接到一个特定的用户。我很难找到获取当前会话的最佳方法,它只包含用户名,并发送usersID与创建的食谱链接。userID是一个自动递增的PK,只能从prisma后端访问。任何想法,我如何可以链接到用户的食谱只有nextauth凭证(用户名和密码)。


的数据


0wi1tuuw

0wi1tuuw1#

在NextAuth配置中,您可以自定义用户登录时添加到JWT和会话中的内容。
以下是如何将userId添加到JWT和会话:

import NextAuth from 'next-auth'
import Providers from 'next-auth/providers'
import Adapters from 'next-auth/adapters'
import prisma from '../../../db' // your prisma client

export default NextAuth({
  providers: [
    Providers.Credentials({
      // Your credentials provider configuration
    })
  ],
  adapter: Adapters.Prisma.Adapter({ prisma }),
  secret: process.env.SECRET,
  callbacks: {
    async jwt(token, user) {
      // Initial sign in
      if (user) {
        token.id = user.id
      }
      return token
    },
    async session(session, token) {
      // Add property to session, like `userId`
      session.userId = token.id
      return session
    }
  }
})

字符串
在您的API路由中,您现在可以直接从会话中访问`userId:

import { getSession } from "next-auth/client";

export default async (req, res) => {
  const session = await getSession({ req });
  console.log(session.userId);  // you can use this id to link the user with the recipe
  // your code here
}


这样,每当用户登录时,他们的userId都包含在JWT和会话数据中。

相关问题