Rix is the official package layer for Vix.cpp Browse packages
Skip to content

Auth API Reference ​

This page summarizes the public API exposed by rix/auth.

The documentation examples use the unified Rix facade:

cpp
#include <rix.hpp>

and access Auth through:

cpp
rix.auth

The lower-level Auth types live under:

cpp
rixlib::auth

Use the facade for application code.

Use lower-level types when you need explicit types, custom stores, advanced integrations, or tests.

Facade entry point ​

The Auth module is mounted at:

cpp
rix.auth

Common usage:

cpp
auto auth = rix.auth.memory();

auto registered = auth.register_user({
    "ada@example.com",
    "correct-password"
});

auto login = auth.login({
    "ada@example.com",
    "correct-password"
});

Headers ​

Recommended public header:

cpp
#include <rix.hpp>

Independent package header:

cpp
#include <rix/auth.hpp>

Lower-level headers include:

cpp
#include <rix/auth/Auth.hpp>
#include <rix/auth/AuthConfig.hpp>
#include <rix/auth/AuthError.hpp>
#include <rix/auth/AuthResult.hpp>
#include <rix/auth/ManagedAuth.hpp>
#include <rix/auth/PasswordHasher.hpp>
#include <rix/auth/Session.hpp>
#include <rix/auth/SessionStore.hpp>
#include <rix/auth/Token.hpp>
#include <rix/auth/User.hpp>
#include <rix/auth/UserStore.hpp>
#include <rix/auth/stores/MemoryUserStore.hpp>
#include <rix/auth/stores/MemorySessionStore.hpp>
#include <rix/auth/stores/DbUserStore.hpp>
#include <rix/auth/stores/DbSessionStore.hpp>

Namespace ​

Lower-level Auth types are in:

cpp
rixlib::auth

Examples:

cpp
rixlib::auth::AuthConfig
rixlib::auth::AuthError
rixlib::auth::AuthErrorCode
rixlib::auth::User
rixlib::auth::Session
rixlib::auth::Token

rix.auth ​

rix.auth exposes the high-level Auth module.

Create memory auth ​

cpp
auto auth = rix.auth.memory();

With configuration:

cpp
auto config = rix.auth.config.development();

auto auth = rix.auth.memory(config);

Memory auth owns memory-backed user and session stores.

Use it for examples, tests, local experiments, and temporary tools.

Create database auth ​

cpp
auto auth = rix.auth.database(db);

With configuration:

cpp
auto config = rix.auth.config.production();

auto auth = rix.auth.database(db, config);

Database auth owns database-backed user and session stores.

Use it when users and sessions must survive process restarts.

Create Auth with caller-owned stores ​

cpp
auto users = rix.auth.stores.memory_users();
auto sessions = rix.auth.stores.memory_sessions();

auto auth = rix.auth.create(*users, *sessions);

With configuration:

cpp
auto config = rix.auth.config.development();

auto auth = rix.auth.create(*users, *sessions, config);

The stores must stay alive for as long as the Auth object is used.

For normal application code, prefer:

cpp
auto auth = rix.auth.memory();

or:

cpp
auto auth = rix.auth.database(db, config);

Create managed auth with owned stores ​

cpp
auto users = rix.auth.stores.memory_users();
auto sessions = rix.auth.stores.memory_sessions();

auto managed = rix.auth.managed(
    std::move(users),
    std::move(sessions)
);

With configuration:

cpp
auto managed = rix.auth.managed(
    std::move(users),
    std::move(sessions),
    config
);

Check the result:

cpp
if (managed.failed())
{
  const auto &error = managed.error();
  return 1;
}

auto auth = managed.move_value();

Auth ​

Auth is the main authentication service.

It performs registration, login, session authentication, session refresh, logout, logout all sessions, and token issuing.

The facade usually returns either Auth or ManagedAuth depending on how the service is created.

register_user ​

cpp
AuthResult<User> register_user(const RegisterRequest &request);

Registers a new user.

Example:

cpp
auto registered = auth.register_user({
    "ada@example.com",
    "correct-password"
});

On success, returns a User.

On failure, returns an AuthError.

login ​

cpp
AuthResult<LoginResult> login(const LoginRequest &request);

Authenticates a user and creates a session.

Example:

cpp
auto login = auth.login({
    "ada@example.com",
    "correct-password"
});

On success, returns:

cpp
login.value().user
login.value().session
login.value().token

logout ​

cpp
AuthStatus logout(std::string_view session_id);

Revokes one session.

Example:

cpp
auto status = auth.logout(session_id);

logout_user ​

cpp
AuthStatus logout_user(std::string_view user_id);

Revokes all sessions for a user.

Example:

cpp
auto status = auth.logout_user(user_id);

Use this for logout from all devices, password changes, account disabling, or security events.

authenticate_session ​

cpp
AuthResult<Session> authenticate_session(std::string_view session_id);

Finds and validates a session.

Example:

cpp
auto session = auth.authenticate_session(session_id);

A session must be valid, not revoked, and not expired.

refresh_session ​

cpp
AuthResult<Session> refresh_session(std::string_view session_id);

Refreshes a valid session.

Example:

cpp
auto refreshed = auth.refresh_session(session_id);

A refreshed session receives an updated expiration timestamp and last-seen timestamp.

issue_token ​

cpp
AuthResult<Token> issue_token(std::string_view user_id);

Creates a short-lived token for a user.

Example:

cpp
auto token = auth.issue_token(user_id);

config ​

cpp
const AuthConfig &config() const noexcept;

Returns the current Auth configuration.

Example:

cpp
auto min_length = auth.config().min_password_length();

password_hasher ​

cpp
const PasswordHasher &password_hasher() const noexcept;

Returns the password hasher used by the Auth service.

Example:

cpp
auto min_length = auth.password_hasher().min_password_length();

Request types ​

RegisterRequest ​

cpp
struct RegisterRequest
{
  std::string email;
  std::string password;
};

Used by:

cpp
auth.register_user(...)

Example:

cpp
auto registered = auth.register_user({
    "ada@example.com",
    "correct-password"
});

LoginRequest ​

cpp
struct LoginRequest
{
  std::string email;
  std::string password;
};

Used by:

cpp
auth.login(...)

Example:

cpp
auto login = auth.login({
    "ada@example.com",
    "correct-password"
});

Result types ​

LoginResult ​

cpp
struct LoginResult
{
  User user;
  Session session;
  Token token;
};

Returned by:

cpp
auth.login(...)

Example:

cpp
auto login = auth.login({
    "ada@example.com",
    "correct-password"
});

if (login.ok())
{
  const auto &user = login.value().user;
  const auto &session = login.value().session;
  const auto &token = login.value().token;
}

AuthResult<T> ​

AuthResult<T> stores either a success value of type T or an AuthError.

Used by operations that return data.

Examples:

cpp
AuthResult<User>
AuthResult<LoginResult>
AuthResult<Session>
AuthResult<Token>
AuthResult<std::string>
AuthResult<std::optional<User>>
AuthResult<std::vector<Session>>

Static constructors ​

cpp
static AuthResult<T> success(T value);
static AuthResult<T> failure(AuthError error);

Methods ​

cpp
bool ok() const noexcept;
bool failed() const noexcept;
explicit operator bool() const noexcept;

const T &value() const;
T &value();
T move_value();

const AuthError &error() const noexcept;

Example:

cpp
auto result = auth.login({
    "ada@example.com",
    "correct-password"
});

if (result.failed())
{
  const auto &error = result.error();
  return 1;
}

const auto &login = result.value();

Do not call .value() before checking ok() or failed().

AuthStatus ​

AuthStatus stores success or an AuthError.

Used by operations that do not return a value.

Examples:

cpp
auth.logout(...)
auth.logout_user(...)
store.update(...)
store.remove_by_id(...)
store.revoke_by_id(...)

Static constructors ​

cpp
static AuthStatus success();
static AuthStatus failure(AuthError error);

Methods ​

cpp
bool ok() const noexcept;
bool failed() const noexcept;
explicit operator bool() const noexcept;

const AuthError &error() const noexcept;

Example:

cpp
auto status = auth.logout(session_id);

if (status.failed())
{
  const auto &error = status.error();
  return 1;
}

AuthErrorCode ​

AuthErrorCode is the stable error-code enum for Auth.

cpp
enum class AuthErrorCode
{
  None,

  InvalidInput,
  InvalidState,
  InvalidEmail,
  InvalidPassword,

  UserNotFound,
  UserAlreadyExists,

  InvalidCredentials,
  EmailVerificationRequired,
  UserDisabled,

  InvalidSession,
  SessionExpired,
  SessionRevoked,

  InvalidToken,
  TokenExpired,
  TokenRevoked,

  StoreError,
  CryptoError,
  ValidationError,
  ConfigurationError,

  Unknown
};

Use error codes for programmatic decisions.

Use error messages for diagnostics.

AuthError ​

AuthError stores a stable error code and a human-readable message.

Constructors ​

cpp
AuthError();
AuthError(AuthErrorCode code, std::string message);

Methods ​

cpp
bool ok() const noexcept;
bool has_error() const noexcept;
AuthErrorCode code() const noexcept;
const std::string &message() const noexcept;
bool is(AuthErrorCode code) const noexcept;

Example:

cpp
if (login.failed())
{
  const auto &error = login.error();

  if (error.is(rixlib::auth::AuthErrorCode::InvalidCredentials))
  {
    return 1;
  }
}

Helper functions ​

cpp
std::string_view to_string(AuthErrorCode code) noexcept;

AuthError make_auth_ok();

AuthError make_auth_error(
    AuthErrorCode code,
    std::string message
);

Facade helpers are available through:

cpp
rix.auth.error

rix.auth.error ​

rix.auth.error exposes error helper functions.

none ​

cpp
auto error = rix.auth.error.none();

Creates a success error value.

make ​

cpp
auto error = rix.auth.error.make(
    rixlib::auth::AuthErrorCode::InvalidInput,
    "Invalid input."
);

Creates an Auth error.

to_string ​

cpp
rix.auth.error.to_string(error)
rix.auth.error.to_string(error.code())

Converts an error or error code to a stable string.

ok ​

cpp
bool ok = rix.auth.error.ok(error);

Returns true when the error represents success.

failed ​

cpp
bool failed = rix.auth.error.failed(error);

Returns true when the error represents failure.

is ​

cpp
bool invalid = rix.auth.error.is(
    error,
    rixlib::auth::AuthErrorCode::InvalidInput
);

Returns true when the error has the given code.

AuthConfig ​

AuthConfig controls password policy, session lifetime, token lifetime, token issuer, email verification behavior, session rotation, and inactive user rejection.

Create config ​

cpp
AuthConfig();

Facade helpers:

cpp
auto config = rix.auth.config.development();
auto config = rix.auth.config.production();

Static constructors ​

cpp
static AuthConfig development();
static AuthConfig production();

Password length ​

cpp
std::size_t min_password_length() const noexcept;
void set_min_password_length(std::size_t value) noexcept;

std::size_t max_password_length() const noexcept;
void set_max_password_length(std::size_t value) noexcept;

Session lifetime ​

cpp
std::int64_t session_ttl_seconds() const noexcept;
void set_session_ttl_seconds(std::int64_t value) noexcept;

Token lifetime ​

cpp
std::int64_t token_ttl_seconds() const noexcept;
void set_token_ttl_seconds(std::int64_t value) noexcept;

Password hashing settings ​

cpp
std::uint32_t password_hash_iterations() const noexcept;
void set_password_hash_iterations(std::uint32_t value) noexcept;

std::size_t password_salt_size() const noexcept;
void set_password_salt_size(std::size_t value) noexcept;

std::size_t password_hash_size() const noexcept;
void set_password_hash_size(std::size_t value) noexcept;

Issuer ​

cpp
const std::string &issuer() const noexcept;
void set_issuer(std::string value);

Email verification ​

cpp
bool require_email_verification() const noexcept;
void set_require_email_verification(bool value) noexcept;

Session rotation ​

cpp
bool rotate_sessions() const noexcept;
void set_rotate_sessions(bool value) noexcept;

Inactive user rejection ​

cpp
bool reject_inactive_users() const noexcept;
void set_reject_inactive_users(bool value) noexcept;

rix.auth.config ​

rix.auth.config exposes configuration helpers.

development ​

cpp
auto config = rix.auth.config.development();

Returns a development Auth configuration.

production ​

cpp
auto config = rix.auth.config.production();

Returns a production Auth configuration.

development_with_min_password_length ​

cpp
auto config = rix.auth.config.development_with_min_password_length(10);

Returns development configuration with a custom minimum password length.

production_with_min_password_length ​

cpp
auto config = rix.auth.config.production_with_min_password_length(12);

Returns production configuration with a custom minimum password length.

validate ​

cpp
auto status = rix.auth.config.validate(config);

Validates a configuration and returns AuthStatus.

valid ​

cpp
bool ok = rix.auth.config.valid(config);

Returns true when the configuration is valid.

PasswordHasher ​

PasswordHasher hashes passwords and verifies passwords against stored password hashes.

It uses the configured password policy and hashing settings.

Constructors ​

cpp
PasswordHasher();
explicit PasswordHasher(const AuthConfig &config);

Hash ​

cpp
AuthResult<std::string> hash(std::string_view password) const;

Example:

cpp
auto hashed = rix.auth.password.hash("correct-password");

if (hashed.failed())
{
  return 1;
}

Verify ​

cpp
bool verify(
    std::string_view password,
    std::string_view password_hash) const;

Example:

cpp
bool valid = rix.auth.password.verify(
    "correct-password",
    hashed.value()
);

Check policy ​

cpp
bool accepts(std::string_view password) const noexcept;

Example:

cpp
bool accepted = rix.auth.password.accepts("correct-password");

Policy methods ​

cpp
std::size_t min_password_length() const noexcept;
void set_min_password_length(std::size_t value) noexcept;

std::size_t max_password_length() const noexcept;
void set_max_password_length(std::size_t value) noexcept;

std::uint32_t iterations() const noexcept;
void set_iterations(std::uint32_t value) noexcept;

std::size_t salt_size() const noexcept;
void set_salt_size(std::size_t value) noexcept;

std::size_t hash_size() const noexcept;
void set_hash_size(std::size_t value) noexcept;

rix.auth.password ​

rix.auth.password exposes password helpers.

hash ​

cpp
auto hashed = rix.auth.password.hash("correct-password");

With configuration:

cpp
auto hashed = rix.auth.password.hash(
    "correct-password",
    config
);

verify ​

cpp
bool valid = rix.auth.password.verify(
    "correct-password",
    password_hash
);

With configuration:

cpp
bool valid = rix.auth.password.verify(
    "correct-password",
    password_hash,
    config
);

accepts ​

cpp
bool accepted = rix.auth.password.accepts("correct-password");

With configuration:

cpp
bool accepted = rix.auth.password.accepts(
    "correct-password",
    config
);

hasher ​

cpp
auto hasher = rix.auth.password.hasher();

With configuration:

cpp
auto hasher = rix.auth.password.hasher(config);

User ​

User is the persistent identity model used by Auth.

Constructors ​

cpp
User();

User(
    std::string id,
    std::string email,
    std::string password_hash,
    std::int64_t created_at
);

Identity fields ​

cpp
const std::string &id() const noexcept;
void set_id(std::string value);

const std::string &email() const noexcept;
void set_email(std::string value);

const std::string &password_hash() const noexcept;
void set_password_hash(std::string value);

The password hash is sensitive.

Do not log it or send it to clients.

Account state ​

cpp
bool email_verified() const noexcept;
void set_email_verified(bool value) noexcept;

bool active() const noexcept;
void set_active(bool value) noexcept;

Timestamps ​

cpp
std::int64_t created_at() const noexcept;
void set_created_at(std::int64_t value) noexcept;

std::int64_t updated_at() const noexcept;
void set_updated_at(std::int64_t value) noexcept;

Helpers ​

cpp
bool valid() const noexcept;
bool has_id() const noexcept;
bool has_email() const noexcept;

bool has_email(std::string_view value) const noexcept;
bool has_id(std::string_view value) const noexcept;

bool can_authenticate() const noexcept;

Session ​

Session represents server-side authenticated session state.

Constructors ​

cpp
Session();

Session(
    std::string id,
    std::string user_id,
    std::int64_t created_at,
    std::int64_t expires_at
);

Identity fields ​

cpp
const std::string &id() const noexcept;
void set_id(std::string value);

const std::string &user_id() const noexcept;
void set_user_id(std::string value);

The session id is sensitive.

Do not log it in production.

Timestamps ​

cpp
std::int64_t created_at() const noexcept;
void set_created_at(std::int64_t value) noexcept;

std::int64_t expires_at() const noexcept;
void set_expires_at(std::int64_t value) noexcept;

std::int64_t last_seen_at() const noexcept;
void set_last_seen_at(std::int64_t value) noexcept;

Revocation ​

cpp
bool revoked() const noexcept;
void set_revoked(bool value) noexcept;
void revoke() noexcept;

Helpers ​

cpp
bool valid() const noexcept;
bool has_id() const noexcept;
bool has_user_id() const noexcept;

bool has_id(std::string_view value) const noexcept;
bool belongs_to(std::string_view value) const noexcept;

bool expired(std::int64_t now) const noexcept;
bool usable(std::int64_t now) const noexcept;
bool refreshable(std::int64_t now) const noexcept;

void refresh(std::int64_t now, std::int64_t ttl_seconds) noexcept;

Token ​

Token represents a short-lived token attached to a user.

Constructors ​

cpp
Token();

Token(
    std::string value,
    std::string user_id,
    std::int64_t issued_at,
    std::int64_t expires_at
);

Token fields ​

cpp
const std::string &value() const noexcept;
void set_value(std::string value);

const std::string &user_id() const noexcept;
void set_user_id(std::string value);

const std::string &issuer() const noexcept;
void set_issuer(std::string value);

The raw token value is sensitive.

Do not log it in production.

Timestamps ​

cpp
std::int64_t issued_at() const noexcept;
void set_issued_at(std::int64_t value) noexcept;

std::int64_t expires_at() const noexcept;
void set_expires_at(std::int64_t value) noexcept;

Revocation ​

cpp
bool revoked() const noexcept;
void set_revoked(bool value) noexcept;
void revoke() noexcept;

Helpers ​

cpp
bool valid() const noexcept;
bool has_value() const noexcept;
bool has_user_id() const noexcept;

bool belongs_to(std::string_view value) const noexcept;
bool matches(std::string_view value) const noexcept;
bool issued_by(std::string_view value) const noexcept;

bool expired(std::int64_t now) const noexcept;
bool usable(std::int64_t now) const noexcept;

ManagedAuth ​

ManagedAuth owns auth stores and exposes the public Auth API.

Use it when the auth object should safely own its user store and session store.

Constructor ​

cpp
ManagedAuth(
    std::unique_ptr<UserStore> users,
    std::unique_ptr<SessionStore> sessions,
    AuthConfig config
);

The facade creates ManagedAuth for:

cpp
rix.auth.memory()
rix.auth.database(db)
rix.auth.managed(...)

Auth operations ​

cpp
AuthResult<User> register_user(const RegisterRequest &request);

AuthResult<LoginResult> login(const LoginRequest &request);

AuthStatus logout(std::string_view session_id);

AuthStatus logout_user(std::string_view user_id);

AuthResult<Session> authenticate_session(std::string_view session_id);

AuthResult<Session> refresh_session(std::string_view session_id);

AuthResult<Token> issue_token(std::string_view user_id);

Accessors ​

cpp
const AuthConfig &config() const noexcept;
const PasswordHasher &password_hasher() const noexcept;

Auth &service() noexcept;
const Auth &service() const noexcept;

UserStore &users() noexcept;
const UserStore &users() const noexcept;

SessionStore &sessions() noexcept;
const SessionStore &sessions() const noexcept;

Example:

cpp
auto auth = rix.auth.memory();

auto all_users = auth.users().all();

UserStore ​

UserStore is the abstract persistence interface for users.

Methods ​

cpp
virtual AuthStatus create(const User &user) = 0;

virtual AuthStatus update(const User &user) = 0;

virtual AuthStatus remove_by_id(std::string_view id) = 0;

virtual AuthResult<std::optional<User>>
find_by_id(std::string_view id) const = 0;

virtual AuthResult<std::optional<User>>
find_by_email(std::string_view email) const = 0;

virtual AuthResult<bool>
exists_by_id(std::string_view id) const = 0;

virtual AuthResult<bool>
exists_by_email(std::string_view email) const = 0;

virtual AuthResult<std::vector<User>> all() const = 0;

Concrete implementations:

cpp
MemoryUserStore
DbUserStore

SessionStore ​

SessionStore is the abstract persistence interface for sessions.

Methods ​

cpp
virtual AuthStatus create(const Session &session) = 0;

virtual AuthStatus update(const Session &session) = 0;

virtual AuthStatus remove_by_id(std::string_view id) = 0;

virtual AuthStatus revoke_by_id(std::string_view id) = 0;

virtual AuthStatus revoke_by_user_id(std::string_view user_id) = 0;

virtual AuthResult<std::optional<Session>>
find_by_id(std::string_view id) const = 0;

virtual AuthResult<std::vector<Session>>
find_by_user_id(std::string_view user_id) const = 0;

virtual AuthResult<bool>
exists_by_id(std::string_view id) const = 0;

virtual AuthResult<std::vector<Session>> all() const = 0;

Concrete implementations:

cpp
MemorySessionStore
DbSessionStore

MemoryUserStore ​

MemoryUserStore is an in-memory user store.

It is useful for tests, examples, local development, and small applications that do not need durable user persistence.

Methods ​

It implements all UserStore methods.

Additional helpers:

cpp
void clear();

std::size_t size() const;

bool empty() const;

Example:

cpp
auto auth = rix.auth.memory();

auto users = auth.users().all();

if (users.ok())
{
  rix.debug.print("users:", users.value().size());
}

MemorySessionStore ​

MemorySessionStore is an in-memory session store.

It is useful for tests, examples, local development, and small applications that do not need durable session persistence.

Methods ​

It implements all SessionStore methods.

Additional helpers:

cpp
void clear();

std::size_t size() const;

bool empty() const;

Example:

cpp
auto auth = rix.auth.memory();

auto sessions = auth.sessions().all();

if (sessions.ok())
{
  rix.debug.print("sessions:", sessions.value().size());
}

DbUserStore ​

DbUserStore is a database-backed user store.

It persists users through Vix database storage.

Constructor ​

cpp
explicit DbUserStore(
    vix::db::Database &database,
    bool create_schema = true);

Methods ​

It implements all UserStore methods.

Additional helper:

cpp
AuthStatus ensure_schema();

The store expects a table named:

txt
rix_auth_users

The constructor can create the table automatically when requested.

DbSessionStore ​

DbSessionStore is a database-backed session store.

It persists sessions through Vix database storage.

Constructor ​

cpp
explicit DbSessionStore(
    vix::db::Database &database,
    bool create_schema = true);

Methods ​

It implements all SessionStore methods.

Additional helper:

cpp
AuthStatus ensure_schema();

The store expects a table named:

txt
rix_auth_sessions

The constructor can create the table automatically when requested.

rix.auth.stores ​

rix.auth.stores exposes store helpers.

Memory stores ​

cpp
auto users = rix.auth.stores.memory_users();
auto sessions = rix.auth.stores.memory_sessions();

Database stores ​

cpp
auto users = rix.auth.stores.database_users(db);
auto sessions = rix.auth.stores.database_sessions(db);

Use these helpers for advanced store wiring.

For normal application code, prefer:

cpp
auto auth = rix.auth.memory();

or:

cpp
auto auth = rix.auth.database(db, config);

Version helpers ​

rix.auth exposes package version helpers.

cpp
std::string version() const;

int version_major() const noexcept;
int version_minor() const noexcept;
int version_patch() const noexcept;
int version_number() const noexcept;

Example:

cpp
auto version = rix.auth.version();

Common patterns ​

Register and login ​

cpp
auto auth = rix.auth.memory();

auto registered = auth.register_user({
    "ada@example.com",
    "correct-password"
});

if (registered.failed())
{
  return 1;
}

auto login = auth.login({
    "ada@example.com",
    "correct-password"
});

if (login.failed())
{
  return 1;
}

Authenticate session ​

cpp
auto session = auth.authenticate_session(
    login.value().session.id()
);

if (session.failed())
{
  return 1;
}

Refresh session ​

cpp
auto refreshed = auth.refresh_session(
    login.value().session.id()
);

if (refreshed.failed())
{
  return 1;
}

Logout ​

cpp
auto status = auth.logout(
    login.value().session.id()
);

if (status.failed())
{
  return 1;
}

Issue token ​

cpp
auto token = auth.issue_token(
    registered.value().id()
);

if (token.failed())
{
  return 1;
}

Handle errors ​

cpp
if (login.failed())
{
  const auto &error = login.error();

  rix.debug.eprint(
      "auth error:",
      rix.auth.error.to_string(error),
      error.message()
  );

  return 1;
}

Security reminders ​

Do not log:

txt
plain-text passwords
password hashes
session ids
raw token values

Use memory auth for examples and tests.

Use database auth for real applications.

Use production configuration for real deployments.

Always check results before calling .value().

What you should remember ​

Application code usually starts with:

cpp
#include <rix.hpp>

Then creates Auth with:

cpp
auto auth = rix.auth.memory();

or:

cpp
auto auth = rix.auth.database(db, config);

Main operations:

cpp
auth.register_user(...)
auth.login(...)
auth.authenticate_session(...)
auth.refresh_session(...)
auth.logout(...)
auth.logout_user(...)
auth.issue_token(...)

Password helpers:

cpp
rix.auth.password.hash(...)
rix.auth.password.verify(...)
rix.auth.password.accepts(...)

Configuration helpers:

cpp
rix.auth.config.development()
rix.auth.config.production()
rix.auth.config.validate(config)

Error helpers:

cpp
rix.auth.error.to_string(error)
rix.auth.error.is(error, code)

Stores:

cpp
rix.auth.stores.memory_users()
rix.auth.stores.memory_sessions()
rix.auth.stores.database_users(db)
rix.auth.stores.database_sessions(db)

Next step ​

Continue with package examples.

Next: Examples

Released under the MIT License.