npm.io
0.7.0 • Published 2h ago

@fonderie/react-native-auth

Licence
MIT
Version
0.7.0
Deps
2
Size
120 kB
Vulns
0
Weekly
0
Stars
2

@fonderie/react-native-auth

React Native hooks for Fonderie auth — useLogin, useRegister, useSession, useLogout, useForgotPassword, useResetPassword, and useVerifyEmail. Same shape as @fonderie/react-auth, with the access token persisted to AsyncStorage instead of localStorage.

Install

npm install @fonderie/react-native-auth @react-native-async-storage/async-storage

Wrap your app in FonderieProvider from @fonderie/react once and every hook resolves the client from context — no client argument at call sites:

import { FonderieProvider } from "@fonderie/react";

<FonderieProvider client={client}>
  <App />
</FonderieProvider>;

// anywhere below it:
const { ...state } = useLogin();

Passing a client explicitly (as below) still works everywhere and takes precedence over context — handy in tests and multi-client apps.

Use

import { FonderieClient } from '@fonderie/client';
import { useLogin, useSession } from '@fonderie/react-native-auth';

const client = new FonderieClient({ baseUrl: 'https://api.example.com/v1' });

function LoginScreen() {
  const { login, isLoading, error } = useLogin(client.auth);

  return (
    <TouchableOpacity disabled={isLoading} onPress={() => login({ email, password })}>
      <Text>{isLoading ? 'Signing in…' : 'Sign in'}</Text>
    </TouchableOpacity>
  );
}

function Profile() {
  const { user, isAuthenticated, logout } = useSession(client.auth);
  if (!isAuthenticated) return null;
  return <TouchableOpacity onPress={logout}><Text>Log out {user?.email}</Text></TouchableOpacity>;
}

Each hook takes the same AuthClient instance (client.auth) — construct one FonderieClient at the app root and pass it down (React context or a prop). The access token is persisted to AsyncStorage and restored automatically by useSession on mount; don't re-implement that in app code.

Want pre-built screens instead of wiring your own form? See @fonderie/react-native-auth-screens.

Why this exists

You've shipped this plumbing before — auth, teams, billing, messaging — and the next project will ask for it again. Fonderie packages it once: plain TypeScript modules for @fonderie/core, PostgreSQL-backed, self-hosted, MIT. No external control plane, no per-seat anything. Register the modules you need; skip the ones you don't.

This package owns the React Native binding for auth — state management around @fonderie/client, nothing more. No business logic lives here; it lives in @fonderie/auth on the server.

Browse the whole set at fonderiejs/sdk · follow @fonderiejs

License

MIT Fonderie, Inc.

Keywords