Better Auth RS

Email & Password

Sign up and sign in with email, password, and optional username.

The EmailPasswordPlugin handles user registration and authentication via email/password or username/password.

Setup

use better_auth::plugins::EmailPasswordPlugin;

let auth = BetterAuth::new(config)
    .database(database)
    .plugin(
        EmailPasswordPlugin::new()
            .enable_signup(true)
            .password_min_length(8)
            .require_email_verification(false)
    )
    .build()
    .await?;

Plugin Options

OptionTypeDefaultDescription
enable_signupbooltrueAllow new user registration
require_email_verificationboolfalseRequire verified email before sign-in
password_min_lengthusize8Minimum password length

Sign Up

POST /sign-up/email
Content-Type: application/json

Request

{
  "name": "Alice",
  "email": "alice@example.com",
  "password": "secure_password",
  "username": "alice",
  "displayUsername": "Alice"
}
FieldRequiredDescription
nameYesDisplay name
emailYesValid email address
passwordYesMust meet minimum length
usernameNoUnique username for username-based sign-in
displayUsernameNoCase-preserved display version of username
callbackURLNoRedirect URL after sign-up

Response

{
  "token": "session_abc123...",
  "user": {
    "id": "uuid",
    "name": "Alice",
    "email": "alice@example.com",
    "emailVerified": false,
    "username": "alice",
    "displayUsername": "Alice",
    "createdAt": "2024-01-01T00:00:00Z",
    "updatedAt": "2024-01-01T00:00:00Z"
  }
}

Errors

StatusCondition
400Invalid email format or password too short
409Email or username already exists

Sign In with Email

POST /sign-in/email
Content-Type: application/json

Request

{
  "email": "alice@example.com",
  "password": "secure_password"
}
FieldRequiredDescription
emailYesRegistered email address
passwordYesAccount password
callbackURLNoRedirect URL after sign-in
rememberMeNoExtended session duration

Response

{
  "redirect": false,
  "token": "session_abc123...",
  "url": null,
  "user": { ... }
}

Errors

StatusCondition
400Missing or invalid email format
401Invalid credentials

Sign In with Username

POST /sign-in/username
Content-Type: application/json

Request

{
  "username": "alice",
  "password": "secure_password"
}

Response

Same format as email sign-in.

Errors

StatusCondition
400Missing username or password
401Invalid credentials

On this page