Skip to content

Authentication

The Auth module wraps IUserContext as a composable effect, providing access to the current authenticated user. The default StubUserContext returns a fixed test user for development; production providers resolve from HTTP context, JWT tokens, or Supabase GoTrue.

Quick Start

[Runtime]
[Uses(typeof(AuthModule))]
public sealed partial class AppRuntime;
from user in AuthModule.UserContext.GetCurrentUser<AppRuntime>()
select user;

Interface

public interface IUserContext
{
    Task<UserClaims> GetCurrentUser();
    Task<UserClaims?> GetCurrentUserOrNull();
}

public sealed record UserClaims(string UserId, string Email, string Name);

Default Implementation

StubUserContext is [DevelopmentOnly] and returns a fixed user (dev-user / dev@localhost). Registered as scoped via TryAddScoped.

Production Providers

Provider Registration IUserContext Implementation
JWT + Google OAuth services.AddDeepstagingAuth(jwt => ..., google => ...) HttpContextUserContext (from JWT claims)
Supabase GoTrue options.AddSupabaseAuth() Supabase session-backed

Effects Composition

AuthModule wraps IUserContext. Integrates with Dispatch authorization[Authorize] on handlers uses IUserContext for policy evaluation.