Skip to content

useWalletAuth

Authenticate users with external wallets using Sign-In with Ethereum (SIWE).

Usage

import { useWalletAuth } from '@openfort/react-native';
 
function SiweLogin({ walletAddress }: { walletAddress: string }) {
  const { generateSiweMessage, signInWithSiwe, isLoading } = useWalletAuth();
 
  const login = async () => {
    const { message } = await generateSiweMessage({
      wallet: walletAddress,
      from: { domain: 'example.com', uri: 'https://example.com' },
    });
    if (!message) return;
 
    const signature = await signMessageWithWallet(message); // Your wallet signing logic
    await signInWithSiwe({ walletAddress, signature, messageOverride: message });
  };
 
  return null;
}

Return type

type UseWalletAuthReturn = {
  generateSiweMessage(options: GenerateSiweOptions): Promise<SiweMessageResult>
  signInWithSiwe(options: SiweSignInOptions): Promise<WalletAuthResult>
  linkSiwe(options: LinkSiweOptions): Promise<WalletAuthResult>
  isLoading: boolean
  isError: boolean
  isSuccess: boolean
  isAwaitingSignature: boolean
  isGeneratingMessage: boolean
  isSubmittingSignature: boolean
  error?: OpenfortError | null
}
 
type WalletAuthResult = {
  user?: AuthPlayerResponse
  error?: OpenfortError
}
 
type SiweMessageResult = {
  message?: string
  error?: OpenfortError
}

Parameters

generateSiweMessage

type GenerateSiweOptions = {
  wallet: string | { address: string }
  from: {
    domain: string
    uri: string
  }
  onSuccess?: (data: SiweMessageResult) => void
  onError?: (error: OpenfortError) => void
}

signInWithSiwe

type SiweSignInOptions = {
  walletAddress: string
  signature: string
  messageOverride?: string
  disableSignup?: boolean
  onSuccess?: (data: WalletAuthResult) => void
  onError?: (error: OpenfortError) => void
}

linkSiwe

Links a wallet to an existing account.

type LinkSiweOptions = {
  walletAddress: string
  signature: string
  messageOverride?: string
  onSuccess?: (data: WalletAuthResult) => void
  onError?: (error: OpenfortError) => void
}