auth-astro icon indicating copy to clipboard operation
auth-astro copied to clipboard

UnknownAction error in production (Vercel SSR with Astro)

Open ouariachi opened this issue 8 months ago • 0 comments

When deploying to Vercel with SSR, I get the following runtime errors:

When hitting /_render after /api/auth/signin/google:

2025-08-06T21:31:19.942Z [error] [31m[auth][error][0m UnknownAction: Unsupported action. Read more at https://errors.authjs.dev#unknownaction
2025-08-06T21:31:19.943Z [error] at Object.signin (file:///var/task/node_modules/@auth/core/lib/pages/index.js:50:23)
    at AuthInternal (file:///var/task/node_modules/@auth/core/lib/index.js:39:31)
    at async Auth (file:///var/task/node_modules/@auth/core/index.js:111:34)
    at async file:///var/task/dist/server/chunks/server_B4ZebFb3.mjs:37:17
    at async Module.GET (file:///var/task/dist/server/chunks/server_B4ZebFb3.mjs:59:14)
    at async renderEndpoint (file:///var/task/dist/server/chunks/astro/server_D7shTWlI.mjs:504:18)
    at async lastNext (file:///var/task/dist/server/chunks/index_DwQYkVdZ.mjs:2026:23)
    at async NOOP_MIDDLEWARE_FN (file:///var/task/dist/server/chunks/noop-middleware_sscvKdil.mjs:4:20)
    at async callMiddleware (file:///var/task/dist/server/chunks/index_DwQYkVdZ.mjs:1443:10)
    at async RenderContext.render (file:///var/task/dist/server/chunks/index_DwQYkVdZ.mjs:2073:22)

This is my astro.config.mjs:

// @ts-check
import { defineConfig, envField } from 'astro/config';
import tailwindcss from "@tailwindcss/vite";
import sitemap from "@astrojs/sitemap";
import vercel from '@astrojs/vercel';
import react from "@astrojs/react";

import auth from "auth-astro";

export default defineConfig({
  site: "https://ciclosmelilla.com",
  output: "server",
  adapter: vercel({
    edgeMiddleware: true,
    webAnalytics: {
      enabled: true,
    },
    maxDuration: 8,
  }),
  vite: {
    plugins: [tailwindcss()]
  },
  integrations: [sitemap(), react(), auth()],
  env: {
    schema: {
      RESEND_API_KEY: envField.string({ context: "server", access: "secret" }),
      CONTACT_EMAIL: envField.string({ context: "server", access: "public" }),

      CLOUDINARY_CLOUD_NAME: envField.string({ context: "server", access: "public" }),
      CLOUDINARY_API_KEY: envField.string({ context: "server", access: "secret" }),
      CLOUDINARY_API_SECRET: envField.string({ context: "server", access: "secret" }),

      GOOGLE_CLIENT_ID: envField.string({ context: "server", access: "public" }),
      GOOGLE_CLIENT_SECRET: envField.string({ context: "server", access: "secret" }),

      ALLOWED_EMAILS: envField.string({ context: "server", access: "public" }),
    }
  }
});

And my auth.config.ts:

import Google from "@auth/core/providers/google";
import { GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET } from "astro:env/server";
import { defineConfig } from "auth-astro";

export default defineConfig({
  providers: [
    Google({
      clientId: GOOGLE_CLIENT_ID,
      clientSecret: GOOGLE_CLIENT_SECRET,
    }),
  ],
});

My login logic:

<button
      id="signin-button"
>
  Iniciar sesión con Google
</button>

<script>
    import { signIn } from 'auth-astro/client'
    const signinButton = document.getElementById("signin-button") as HTMLButtonElement;
    signinButton.onclick = () => signIn("google");
<script>

My dependencies:

"@astrojs/vercel": "^8.2.5", "@auth/core": "^0.37.4", "astro": "^5.12.4", "auth-astro": "^4.2.0",

ouariachi avatar Aug 06 '25 21:08 ouariachi