You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

sidebase nuxt-auth配置报错:CredentialsProvider不是函数求助

解决sidebase nuxt-auth中CredentialsProvider不是函数的500错误

问题分析

报错CredentialsProvider is not a function的核心原因是next-auth v4的ES模块导出规则与当前导入写法不兼容,同时需确保sidebase nuxt-auth和next-auth的版本匹配。


解决方案

1. 修正CredentialsProvider导入方式

替换原导入语句,使用适配ES模块的默认导出写法:

import { NuxtAuthHandler } from '#auth'
// 正确导入方式
import CredentialsProvider from "next-auth/providers/credentials"
// 若上述写法仍报错,尝试解构默认导出
// import { default as CredentialsProvider } from "next-auth/providers/credentials"

2. 确保依赖版本兼容

你的@sidebase/nuxt-auth@0.10.0已匹配要求的next-auth@~4.21.1,但需清理依赖缓存避免冲突:

rm -rf node_modules package-lock.json
npm install

3. 完善nuxt.config.ts配置

补充authSecret和runtimeConfig的必要配置,避免运行时缺失参数:

export default defineNuxtConfig({
  compatibilityDate: '2024-11-01',
  devtools: { enabled: true },
  modules: ['@nuxtjs/i18n', '@primevue/nuxt-module', '@sidebase/nuxt-auth'],
  auth: {
    globalAppMiddleware: true,
    baseURL: `http://localhost:${process.env.PORT || 3000}`,
    provider: {
      type: "authjs"
    },
    // 开发环境临时密钥,生产环境必须用NUXT_AUTH_SECRET环境变量
    secret: process.env.NUXT_AUTH_SECRET || 'dev-only-secret-123'
  },
  runtimeConfig: {
    // 后端API地址,建议通过环境变量配置
    apiUrl: process.env.NUXT_API_URL || 'http://localhost:8000/api/login'
  }
})

4. 修正认证处理逻辑

完善server/api/auth/[...].ts的参数校验和错误捕获,避免空值导致的异常:

import { NuxtAuthHandler } from '#auth'
import CredentialsProvider from "next-auth/providers/credentials"

const config = useRuntimeConfig()

export default NuxtAuthHandler({
    secret: config.authSecret || process.env.NUXT_AUTH_SECRET,
    providers: [
        CredentialsProvider({
            name: "Credentials",
            credentials: {
                email: { label: "Email", type: "email", placeholder: "Email" },
                password: { label: "Password", type: "password", placeholder: "Password" }
            },
            async authorize(credentials, req) {
                // 校验必填参数
                if (!credentials?.email || !credentials?.password) return null
                
                try {
                    const res = await fetch(config.apiUrl, {
                        method: 'POST',
                        body: JSON.stringify({
                            email: credentials.email,
                            password: credentials.password
                        }),
                        headers: { "Content-Type": "application/json" }
                    })
                    const user = await res.json()

                    // 确保返回的用户数据包含唯一标识id
                    if (res.ok && user?.id) {
                        return { id: user.id, email: user.email, ...user }
                    }
                    return null
                } catch (err) {
                    console.error('登录请求失败:', err)
                    return null
                }
            }
        })
    ],
    pages: {
        signIn: "/login"
    }
});

额外检查项

  • 确保.env文件中配置了NUXT_AUTH_SECRET和NUXT_API_URL(生产环境必填)
  • 重启Nuxt开发服务,确保依赖和配置生效
  • 验证/login页面正确使用useAuth()组合式API处理登录逻辑

内容的提问来源于stack exchange,提问作者Cevat Serin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 10:13:10