nuxt-better-auth

5,238 3
Install
npm install nuxt-better-auth
Latest Version:0.6.1
Vue:3
License:MIT
Last Updated:Sep 5, 2026
Links: GitHub  ·  npm
Maintainer: aa900031

nuxt-better-auth

npm version npm downloads coverage coderabbit

npm peer dependency version - better-auth npm peer dependency version - @nuxt/kit

Features

  • Flexable use better-auth
  • Type safe

Installation

Add dependencies to your project

pnpm add nuxt-better-auth better-auth
npm install nuxt-better-auth better-auth

Add module in your nuxt.config.ts

export default defineNuxtConfig({
	modules: ['nuxt-better-auth'],
	betterAuth: {
		// [Optional]
	},
})

[!TIP] When you are using Postgresql as database with Hyperdrive in Cloudflare Worker, you should setup server singleton by request.

export default defineNuxtConfig({
	modules: ['nuxt-better-auth'],
	// Setup server singleton by request
	betterAuth: {
		server: {
			singleton: 'request',
		},
	},
	// [Optional] Enable async context: https://nitro.build/guide/utils#async-context-experimental
	nitro: {
		experimental: {
			asyncContext: true,
		},
	},
})

Usage

Create sign in / sign out button with useAuthClient

<script setup lang="ts">
const authClient = useAuthClient()

async function handleSignInClick() {
	await authClient.signIn.anonymous()
}
</script>

<template>
	<button @click="handleSignInClick">
		Sign In
	</button>
</template>

Get reactive user / session data with useAuthState

<script setup lang="ts">
const { session, user } = useAuthState()
</script>

<template>
	User: {{ user }}
	Session: {{ session }}
</template>

Get better-auth instance (in server)

export default eventHandler(() => {
	const betterAuth = useBetterAuth()
})

If use singleton for request, please put event to useBetterAuth, or used asyncContext first then you don't need that anymore.

export default eventHandler(async (event) => {
	const betterAuth = useBetterAuth(event)
})

Custom options

Can provide options by file, and with some magic to make it type safe.

Client options

Create file at nuxt's src dir (default same as root dir), e.g: better-auth/client-options.ts or app/better-auth/client-options.ts in nuxt 4

import type { ClientOptions } from 'better-auth'
import { anonymousClient } from 'better-auth/client/plugins'

export default () => ({
	plugins: [
		anonymousClient(),
	],
} satisfies ClientOptions)

Server options

Create file at nuxt's server dir (default is server/), e.g: server/better-auth/server-options.ts

import type { BetterAuthOptions } from 'better-auth'
import { anonymous } from 'better-auth/plugins'

export default () => ({
	plugins: [
		anonymous(),
	],
} satisfies BetterAuthOptions)

License

Made with ❤️

Published under the MIT License.

Related Packages

@roshan-labs/auth

Nuxt auth module

1,300 2
nuxt-backend

Nuxt module and Convex component for a full-stack Convex backend with authentica...

218 0
@idenzy/nuxt

The Nuxt module for Idenzy: the Vue bindings, plus a server render seeded from t...

183 0
@qelos/integrator-nuxt

Nuxt integrator for Qelos: server middleware/module that identifies the user and...

2,274
nuxt-auther

Authentication module for Nuxt.JS

1,609 1

Version History

Version Released License
0.6.1 MIT
0.6.0 MIT
0.5.1 MIT
0.5.0 MIT
0.4.0 MIT