useWalletAuth
Authenticate users by connecting their external wallets using Sign-In with Ethereum (SIWE).
Request
type Request = {
hook: 'useWalletAuth',
params: [options?: WalletHookOptions]
}
type WalletHookOptions = {
logoutOnError?: boolean
recoverWalletAutomatically?: boolean
onSuccess?: (data: WalletHookResult | GenerateSiweMessageResult) => void
onError?: (error: import("@openfort/react-native").OpenfortError) => void
onSettled?: (data: WalletHookResult | GenerateSiweMessageResult | undefined | null, error: import("@openfort/react-native").OpenfortError | null) => void
throwOnError?: boolean
}
Response
type Response = UseWalletAuthReturn
type UseWalletAuthReturn = WalletAuthStatusFlags & {
generateSiweMessage(options: GenerateSiweMessageOptions): Promise<GenerateSiweMessageResult>
signInWithSiwe(options: SiweOptions): Promise<WalletHookResult>
linkSiwe(options: LinkSiweOptions): Promise<WalletHookResult>
}
type WalletAuthStatusFlags = {
isLoading: boolean
isError: boolean
isSuccess: boolean
error?: import("@openfort/react-native").OpenfortError | null
isAwaitingSignature: boolean
isGeneratingMessage: boolean
isSubmittingSignature: boolean
}
type WalletHookResult = {
error?: import("@openfort/react-native").OpenfortError
user?: import("@openfort/openfort-js").AuthPlayerResponse
wallet?: import("@openfort/react-native").UserWallet
}
type GenerateSiweMessageResult = {
error?: import("@openfort/react-native").OpenfortError
message?: string
}
Example
import { useWalletAuth } from "@openfort/react-native"
function SiweFlow({ walletAddress }: { walletAddress: string }) {
const {
generateSiweMessage,
signInWithSiwe,
linkSiwe,
isGeneratingMessage,
isAwaitingSignature,
isSubmittingSignature,
isLoading,
isError,
isSuccess,
error,
} = useWalletAuth({
throwOnError: true,
onSuccess: () => {},
onError: () => {},
onSettled: () => {}
})
const startLogin = async () => {
const { message } = await generateSiweMessage({
wallet: walletAddress,
from: {
domain: 'example.com',
uri: 'https://example.com',
},
})
if (!message) return
const signature = await signMessageWithWallet(message) // custom helper
await signInWithSiwe({ walletAddress, signature, messageOverride: message })
}
return null
}