@adonisjs/auth
Version:
Official authentication provider for Adonis framework
177 lines (176 loc) • 6.08 kB
TypeScript
import type { HttpContext } from '@adonisjs/core/http';
import type { EmitterLike } from '@adonisjs/core/types/events';
import type { AuthClientResponse, GuardContract } from '../../src/types.ts';
import { GUARD_KNOWN_EVENTS, type PROVIDER_REAL_USER } from '../../src/symbols.ts';
import type { SessionGuardEvents, SessionGuardOptions, SessionUserProviderContract, SessionWithTokensUserProviderContract } from './types.ts';
/**
* Session guard uses AdonisJS session store to track logged-in
* user information.
*
* @template UseRememberTokens - Whether the guard supports remember me tokens
* @template UserProvider - The user provider contract
*
* @example
* const guard = new SessionGuard(
* 'web',
* ctx,
* { useRememberMeTokens: true },
* emitter,
* userProvider
* )
*
* const user = await guard.authenticate()
* console.log('Authenticated user:', user.email)
*/
export declare class SessionGuard<UseRememberTokens extends boolean, UserProvider extends UseRememberTokens extends true ? SessionWithTokensUserProviderContract<unknown> : SessionUserProviderContract<unknown>> implements GuardContract<UserProvider[typeof PROVIDER_REAL_USER]> {
#private;
/**
* Events emitted by the guard
*/
[GUARD_KNOWN_EVENTS]: SessionGuardEvents<UserProvider[typeof PROVIDER_REAL_USER]>;
/**
* Driver name of the guard
*/
driverName: 'session';
/**
* Whether or not the authentication has been attempted
* during the current request.
*/
authenticationAttempted: boolean;
/**
* A boolean to know if a remember me token was used in attempt
* to login a user.
*/
attemptedViaRemember: boolean;
/**
* A boolean to know if the current request has
* been authenticated
*/
isAuthenticated: boolean;
/**
* A boolean to know if the current request is authenticated
* using the "rememember_me" token.
*/
viaRemember: boolean;
/**
* Find if the user has been logged out during
* the current request
*/
isLoggedOut: boolean;
/**
* Reference to an instance of the authenticated user.
* The value only exists after calling one of the
* following methods.
*
* - authenticate
* - check
*
* You can use the "getUserOrFail" method to throw an exception if
* the request is not authenticated.
*/
user?: UserProvider[typeof PROVIDER_REAL_USER];
/**
* The key used to store the logged-in user id inside
* session
*
* @example
* console.log('Session key:', guard.sessionKeyName) // 'auth_web'
*/
get sessionKeyName(): string;
/**
* The key used to store the remember me token cookie
*
* @example
* console.log('Remember me key:', guard.rememberMeKeyName) // 'remember_web'
*/
get rememberMeKeyName(): string;
/**
* Creates a new SessionGuard instance
*
* @param name - Unique name for the guard instance
* @param ctx - HTTP context for the current request
* @param options - Configuration options for the session guard
* @param emitter - Event emitter for guard events
* @param userProvider - User provider for authentication
*
* @example
* const guard = new SessionGuard(
* 'web',
* ctx,
* { useRememberMeTokens: true, rememberMeTokensAge: '30d' },
* emitter,
* userProvider
* )
*/
constructor(name: string, ctx: HttpContext, options: SessionGuardOptions<UseRememberTokens>, emitter: EmitterLike<SessionGuardEvents<UserProvider[typeof PROVIDER_REAL_USER]>>, userProvider: UserProvider);
/**
* Returns an instance of the authenticated user. Or throws
* an exception if the request is not authenticated.
*
* @throws {E_UNAUTHORIZED_ACCESS} When user is not authenticated
*
* @example
* const user = guard.getUserOrFail()
* console.log('User:', user.email)
*/
getUserOrFail(): UserProvider[typeof PROVIDER_REAL_USER];
/**
* Login user using sessions. Optionally, you can also create
* a remember me token to automatically login user when their
* session expires.
*
* @param user - The user to login
* @param remember - Whether to create a remember me token
*
* @example
* await guard.login(user, true)
* console.log('User logged in with remember me token')
*/
login(user: UserProvider[typeof PROVIDER_REAL_USER], remember?: boolean): Promise<void>;
/**
* Logout a user by removing its state from the session
* store and delete the remember me cookie (if any).
*
* @example
* await guard.logout()
* console.log('User logged out successfully')
*/
logout(): Promise<void>;
/**
* Authenticate the current HTTP request by verifying the session
* or remember me token and fails with an exception if authentication fails
*
* @throws {E_UNAUTHORIZED_ACCESS} When authentication fails
*
* @example
* try {
* const user = await guard.authenticate()
* console.log('Authenticated as:', user.email)
* } catch (error) {
* console.log('Authentication failed')
* }
*/
authenticate(): Promise<UserProvider[typeof PROVIDER_REAL_USER]>;
/**
* Silently check if the user is authenticated or not, without
* throwing any exceptions
*
* @example
* const isAuthenticated = await guard.check()
* if (isAuthenticated) {
* console.log('User is authenticated:', guard.user.email)
* }
*/
check(): Promise<boolean>;
/**
* Returns the session info for the clients to send during
* an HTTP request to mark the user as logged-in.
*
* @param user - The user to authenticate as
*
* @example
* const clientAuth = await guard.authenticateAsClient(user)
* // Use clientAuth.session in API tests
*/
authenticateAsClient(user: UserProvider[typeof PROVIDER_REAL_USER]): Promise<AuthClientResponse>;
}