reactfire
Version:
Firebase library for React
105 lines (104 loc) • 3.91 kB
TypeScript
import * as React from 'react';
import { ReactFireOptions, ObservableStatus } from './';
import type { Auth, User, IdTokenResult } from 'firebase/auth';
declare type Claims = IdTokenResult['claims'];
export declare function preloadUser(authResolver: () => Promise<Auth>): Promise<User | null | undefined>;
/**
* Subscribe to Firebase auth state changes, including token refresh
*
* @param options
*/
export declare function useUser<T = unknown>(options?: ReactFireOptions<T>): ObservableStatus<User | null>;
export declare function useIdTokenResult(user: User, forceRefresh?: boolean, options?: ReactFireOptions<IdTokenResult>): ObservableStatus<IdTokenResult>;
export interface AuthCheckProps {
fallback: React.ReactNode;
children: React.ReactNode;
requiredClaims?: Object;
}
export interface ClaimsCheckProps {
user: User;
fallback: React.ReactNode;
children: React.ReactNode;
requiredClaims: {
[key: string]: any;
};
}
export interface ClaimCheckErrors {
[key: string]: any[];
}
export declare type SigninCheckResult = {
signedIn: false;
hasRequiredClaims: false;
errors: {};
user: null;
} | {
signedIn: true;
hasRequiredClaims: boolean;
errors: ClaimCheckErrors;
user: User;
};
export interface SignInCheckOptionsBasic extends ReactFireOptions<SigninCheckResult> {
forceRefresh?: boolean;
}
export interface SignInCheckOptionsClaimsObject extends SignInCheckOptionsBasic {
requiredClaims: Claims;
}
export interface ClaimsValidator {
(claims: Claims): {
hasRequiredClaims: boolean;
errors: ClaimCheckErrors | {};
};
}
export interface SignInCheckOptionsClaimsValidator extends SignInCheckOptionsBasic {
validateCustomClaims: ClaimsValidator;
}
/**
* Subscribe to the signed-in status of a user.
*
* ```ts
* const { status, data:signInCheckResult } = useSigninCheck();
*
* if (status === 'loading') {
* return <LoadingSpinner />}
*
*
* if (signInCheckResult.signedIn === true) {
* return <ProfilePage user={signInCheckResult.user}/>
* } else {
* return <SignInForm />
* }
* ```
*
* Optionally check [custom claims](https://firebase.google.com/docs/auth/admin/custom-claims) of a user as well.
*
* ```ts
* // pass in an object describing the custom claims a user must have
* const {status, data: signInCheckResult} = useSigninCheck({requiredClaims: {admin: true}});
*
* // pass in a custom claims validator function
* const {status, data: signInCheckResult} = useSigninCheck({validateCustomClaims: (userClaims) => {
* // custom validation logic...
* }});
*
* // You can optionally force-refresh the token
* const {status, data: signInCheckResult} = useSigninCheck({forceRefresh: true, requiredClaims: {admin: true}});
* ```
*/
export declare function useSigninCheck(options?: SignInCheckOptionsBasic | SignInCheckOptionsClaimsObject | SignInCheckOptionsClaimsValidator): ObservableStatus<SigninCheckResult>;
/**
* @deprecated Use `useSigninCheck` instead
*
* Conditionally render children based on [custom claims](https://firebase.google.com/docs/auth/admin/custom-claims).
*
* Meant for Concurrent mode only (`<FirebaseAppProvider suspense=true />`). [More detail](https://github.com/FirebaseExtended/reactfire/issues/325#issuecomment-827654376).
*/
export declare function ClaimsCheck({ user, fallback, children, requiredClaims }: ClaimsCheckProps): JSX.Element;
/**
* @deprecated Use `useSigninCheck` instead
*
* Conditionally render children based on signed-in status and [custom claims](https://firebase.google.com/docs/auth/admin/custom-claims).
*
* Meant for Concurrent mode only (`<FirebaseAppProvider suspense=true />`). [More detail](https://github.com/FirebaseExtended/reactfire/issues/325#issuecomment-827654376).
*/
export declare function AuthCheck({ fallback, children, requiredClaims }: AuthCheckProps): JSX.Element;
export {};