繁体   English   中英

Next.js | TypeError:无法读取未定义的属性(读取“秘密”)

[英]Next.js | TypeError: Cannot read properties of undefined (reading 'secret')

我试图验证 next.js 中的 API 路由,但出现以下错误。 页面级身份验证工作正常。 但是试图在 API 路由中获取 session 时会出错。

error - TypeError: Cannot read properties of undefined (reading 'secret')
at unstable_getServerSession (C:\Users\amond07\Workspace\Time_Management_App\time-management-matrix\time-management-matrix-web\node_modules\next-auth\next\index.js:78:48)
at __WEBPACK_DEFAULT_EXPORT__ (webpack-internal:///(api)/./pages/api/tasks/[user]/[date]/index.js:14:100)
at Object.apiResolver (C:\Users\amond07\Workspace\Time_Management_App\time-management-matrix\time-management-matrix-web\node_modules\next\dist\server\api-utils\node.js:179:15)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async DevServer.runApi (C:\Users\amond07\Workspace\Time_Management_App\time-management-matrix\time-management-matrix-web\node_modules\next\dist\server\next-server.js:381:9)
at async Object.fn (C:\Users\amond07\Workspace\Time_Management_App\time-management-matrix\time-management-matrix-web\node_modules\next\dist\server\base-server.js:500:37)
at async Router.execute (C:\Users\amond07\Workspace\Time_Management_App\time-management-matrix\time-management-matrix-web\node_modules\next\dist\server\router.js:213:36)
at async DevServer.run (C:\Users\amond07\Workspace\Time_Management_App\time-management-matrix\time-management-matrix-web\node_modules\next\dist\server\base-server.js:619:29)
at async DevServer.run (C:\Users\amond07\Workspace\Time_Management_App\time-management-matrix\time-management-matrix-web\node_modules\next\dist\server\dev\next-dev-server.js:536:20)
at async DevServer.handleRequest (C:\Users\amond07\Workspace\Time_Management_App\time-management-matrix\time-management-matrix-web\node_modules\next\dist\server\base-server.js:320:20)

下面是代码片段

pages/api/[...nextauth].js

import GoogleProviders from "next-auth/providers/google";

export default NextAuth({
  // Configure one or more authentication providers
  providers: [
    GoogleProviders({
      clientId: process.env.GOOGLE_ID,
      clientSecret: process.env.GOOGLE_SECRET,
    }),
    // ...add more providers here
  ],
  secret: process.env.NEXTAUTH_SECRET,
});

页面\任务\[用户]\日期

import clientPromise from "../../../../../lib/mongodb";
import { authOptions } from "../../../auth/[...nextauth]";
import { unstable_getServerSession } from "next-auth/next";

export default async (req, res) => {
  const { user, date } = req.query;
  const session = await unstable_getServerSession(req, res, authOptions);

  try {
    const client = await clientPromise;
    const db = client.db();
    const tasks = await db
      .collection("tasks")
      .find({ user: user, taskDate: date })
      .sort({ startDate: -1 })
      .toArray();

    res.status(200).send({ tasks });
  } catch (err) {
    res.status(500).send({ error: "failed to fetch data" });
  }
};

是否在 your.env 中定义了“NEXTAUTH_SECRET”(正确)?

我已经解决了这个问题。 问题是我导出它的方式。 不稳定的getServerSession接受json object作为authOptions,但我提供的是function。

编辑[...nextAuth].js如下:

import NextAuth from "next-auth";
import GoogleProviders from "next-auth/providers/google";
import { NextAuthOptions } from "next-auth";

export const authOptions = {
  // Configure one or more authentication providers
  providers: [
    GoogleProviders({
      clientId: process.env.GOOGLE_ID,
      clientSecret: process.env.GOOGLE_SECRET,
    }),
    // ...add more providers here
  ],
  secret: process.env.NEXTAUTH_SECRET,
};

export default NextAuth(authOptions);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM