warmbowskiW
Convex Community8mo ago
14 replies
warmbowski

SSR not working using Tanstack-Start, Convex with Tanstack-Query, Clerk auth.

There seems to be a big problem when SSR kicks in for routes that have convex function calls that require authentication. What I see is the __root beforeLoad calls the server function that returns the token and then calls serverHTTPClient.setAuth(token), so the convexClient has the token when the first convex functions are called, but the user isn't set yet on the convex backend. So the functions throw when they find no auth user (I see the "Not authenticated" errors in the convex dev server console) and that errors out the SSR with a message like the one below showing up in the web server console and the browser when the page loads. So there is a big delay between when the token is retrieved and processed in the serverFunction and when the convex server actually sets the user for auth.getUserIdentity(). I feel like the convex auth with clerk is a black box to me, and I also feel like the authentication on the convex server needs to be triggered in that before load somehow.

All routes work fine in the client when SSR is disabled. Has anyone else run into this? Any suggestions would be much appreciated for troubleshooting. For now, I'm just going without SSR.

Uncaught Error: Switched to client rendering because the server rendering errored:

[Request ID: 3cb284c91a255ec5] Server Error
Uncaught Error: User not authenticated
    at handler (../../convex/functions/members.ts:172:22)

    at handler (../../convex/functions/members.ts:172:22)

    at ConvexHttpClient.action (file:///..../iounia/node_modules/.pnpm/convex@1.24.3_@cl…0__react@19.1.0/node_modules/convex/dist/esm/browser/http_client.js:344:15)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async file:///..../iounia/node_modules/.pnpm/@convex-dev+react…oqamnnqqfk2a/node_modules/@convex-dev/react-query/dist/esm/index.js:228:34
<OutletImpl>        
component    @    __root.tsx:80
<StartClient>        
(anonymous)    @    client.tsx:8
Was this page helpful?