Skip to content

UI Components

We provide React components that provide an additional layer of abstraction above session signers, for users to be able to log in/out of your application.

Adding the Auth Provider

In the file where your React application is configured, wrap your application with AuthProvider:

ts
import { AuthProvider } from "@canvas-js/hooks"
import { App } from "./App.js"

const root = ReactDOM.createRoot(document.getElementById("root")!)

root.render(
	<AuthProvider>
		// other providers here
		<App />
	</AuthProvider>,
)

Using Auth Components

Now you can use any of the provided auth components in your application:

  • The ConnectSIWE component supports in-browser Ethereum wallets.
  • The ConnectSIWF component supports in-browser and in-frame Farcaster miniapps.

Each one will render a button, which toggles between logged-in and logged-out states, which you can customize with your own styles.

ts
import { ConnectSIWE } from "@canvas-js/hooks/components"

const MyComponent = () => {
	const app = useCanvas(...)
	const buttonStyles = { ... }

	return <div className="user-login">
		<ConnectSIWE app={app} buttonStyles={buttonStyles} />
		<ConnectSIWF app={app} buttonStyles={buttonStyles} />
	</div>
}

Other Considerations

If you are using SIWFSigner, you'll need to wrap your application in the provider given to you by @farcaster/auth-kit.

For miniapp frames, you'll also need to set up .well-known/farcaster.json in your app's public directory.

ts
import { AuthKitProvider } from "@farcaster/auth-kit"

const root = ReactDOM.createRoot(document.getElementById("root")!)
const config = {
	// insert farcaster auth config...
}

root.render(
	<AuthKitProvider>
		<AuthKitProvider config={farcasterConfig}>
			<App />
		</AuthKitProvider>
	</AuthKitProvider>
)