The One Tap client forwarded a caller-supplied nonce to Google, but the callback never passed it to verifyGoogleIdToken, so the nonce claim was never checked and a captured ID token could be replayed until it expired. Add POST /one-tap/nonce, which stores a random single-use nonce in the verification table. The client now fetches it before initializing Google and sends it back with the ID token. The callback consumes the nonce before verification, passes it to verifyGoogleIdToken, and rejects a token that carries a nonce claim when none is presented. Closes #10926
Better Auth
Better Auth is a framework-agnostic authentication (and authorization) framework for TypeScript. It provides a comprehensive set of features out of the box and includes a plugin ecosystem that simplifies adding advanced functionalities with minimal code in a short amount of time. Whether you need 2FA, multi-tenant support, or other complex features, it lets you focus on building your actual application instead of reinventing the wheel.
Why Better Auth
Authentication in the TypeScript ecosystem is a half-solved problem. Other open-source libraries often require a lot of additional code for anything beyond basic authentication. Rather than just pushing third-party services as the solution, I believe we can do better as a community—hence, Better Auth.
Contribution
Better Auth is a free and open source project licensed under the MIT License. You are free to do whatever you want with it.
You could help continuing its development by:
Security
If you discover a security vulnerability within Better Auth, please report it via GitHub Security Advisories.
All reports will be promptly addressed, and you'll be credited accordingly.
