Basic Usage
Better Auth provides built-in authentication support for:
- Email and password
- Social provider (Google, GitHub, Apple, and more)
You can extend authentication options using plugins, such as: Username-based login, Passkeys, Email magic links, and more.
Email & Password
To enable email and password authentication:
Sign Up
Before a user can sign in, they need to sign up. To sign up a user using email and password, you need to call the client method signUp.email
with the user's information.
You can pass the following properties to the signUp.email
method:
- email: the user's email address
- password: the user's password
- name: the user's display name
- image: the user's image url (optional)
- callbackURL: a callbackURL if email verification is enabled.
Example: Using React
By default, the user is automatically signed in after signing up. This behaviour can be changed by configuring your auth-config
Sign In
To sign a user in, you can use the signIn.email
function provided by the client. The signIn
function takes an object with the following properties:
- email: the user's email address
- password: the user's password
Example: Using Svelte
Social Sign-On
Better Auth supports multiple social providers, including Google, GitHub, Apple, Discord, and more. To use a social provider, you need to configure the ones you need in the socialProviders
option on your auth
object.
Signin with social providers
To sign in using a social provider you need to call signIn.social
. It takes an object with the following properties:
- provider: the social provider name (e.g.
github
,google
,apple
, etc.) - callbackURL: the URL to redirect to after the user signs in.
- errorCallbackURL: the URL to redirect to if an error occurs during the sign in process.
- disableRedirect: a boolean to disable the automatic redirect to the provider. This is useful when you want to show for example a popup.
and more options to do idToken
authentication.
Example: Using Vue
Signout
To signout a user, you can use the signOut
function provided by the client.
you can pass fetchOptions
to redirect onSuccess
Session Management
Once a user is signed in, you'll want to access the user session. Better Auth allows you easily to access the session data from the server and client side.
Client Side
Better Auth provides a useSession
hook to easily access session data on the client side. This hook is implemented using nanostore and has support for each supported framework and vanilla client, ensuring that any changes to the session (such as signing out) are immediately reflected in your UI.
It has the following properties:
- data: the actual session data which includes
session
anduser
object. - isPending: a boolean that indicates whether the session is being loaded.
- error: an error object that contains any errors that occurred while loading the session.
For more details check session-management documentation.
Server Side
The server provides a session
object that you can use to access the session data. It requires request headers object to be passed to the getSession
method.
Example: Using some popular frameworks
Using Plugins
One of the unique features of Better Auth is a plugins ecosystem. It allows you to add complex auth realted functionilty with small lines of code.
Below is an example of how to add two factor authentication using two factor plugin.
Server Configuration
To add a plugin, you need to import the plugin and pass it to the plugins
option of the auth instance. For example, to add two factor authentication, you can use the following code:
now two factor related routes and method will be available on the server.
Migrate Database
After adding the plugin, you'll need to add the required tables to your database. You can do this by running the migrate
command, or by using the generate
command to create the schema and handle the migration manually.
generating the schema:
using the migrate
command:
If you prefer adding the schema manually, you can check the schema required on the two factor plugin documentation.
Client Configuration
Once we're done with the server, we need to add the plugin to the client. To do this, you need to import the plugin and pass it to the plugins
option of the auth client. For example, to add two factor authentication, you can use the following code:
now two factor related methods will be available on the client.
Next step: See the the two factor plugin documentation.