Wrap your application with the Alchemy Provider to enable embedded wallet functionality.
"use client";
import { config, queryClient } from "@/config";
import {
AlchemyAccountProvider,
AlchemyAccountsProviderProps,
} from "@account-kit/react";
import { QueryClientProvider } from "@tanstack/react-query";
import { PropsWithChildren } from "react";
export const Providers = (
props: PropsWithChildren<{
initialState?: AlchemyAccountsProviderProps["initialState"];
}>,
) => {
return (
<QueryClientProvider client={queryClient}>
<AlchemyAccountProvider
config={config}
queryClient={queryClient}
initialState={props.initialState}
>
{props.children}
</AlchemyAccountProvider>
</QueryClientProvider>
);
};import { config } from "@/config";
import { cookieToInitialState } from "@account-kit/core";
import type { Metadata } from "next";
import { Inter } from "next/font/google";
import { headers } from "next/headers";
import "./globals.css";
import { Providers } from "./providers";
const inter = Inter({ subsets: ["latin"] });
export const metadata: Metadata = {
title: "My App with Embedded Wallets",
description: "My app with Alchemy Smart Wallets integration",
};
export default async function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
const headersList = await headers();
const initialState = cookieToInitialState(
config,
headersList.get("cookie") ?? undefined,
);
return (
<html lang="en">
<body className={inter.className}>
<Providers initialState={initialState}>{children}</Providers>
</body>
</html>
);
}Now you can use the Alchemy React components to add wallet authentication anywhere in your app.
Example page with login functionality
"use client";
import {
useAuthModal,
useLogout,
useSignerStatus,
useUser,
} from "@account-kit/react";
export default function Home() {
const user = useUser();
const { openAuthModal } = useAuthModal();
const signerStatus = useSignerStatus();
const { logout } = useLogout();
return (
<main className="flex min-h-screen flex-col items-center p-24 gap-4 justify-center text-center">
{signerStatus.isInitializing ? (
<>Loading...</>
) : user ? (
<div className="flex flex-col gap-2 p-2">
<p className="text-xl font-bold">Success!</p>
You're logged in as {user.email ?? "anon"}.
<button
className="akui-btn akui-btn-primary mt-6"
onClick={() => logout()}
>
Log out
</button>
</div>
) : (
<button className="akui-btn akui-btn-primary" onClick={openAuthModal}>
Login
</button>
)}
</main>
);
}Now that you have basic authentication working, you can explore additional features:
Send User Operations
Learn how to perform transactions by sending user operations with your smart wallet.
Customize UI Components
Customize and style the UI components to match your application's design.
Add Gas Sponsorship
Enable gasless transactions by setting up gas sponsorship for your users.
Multi-Factor Authentication
Enhance security by implementing multi-factor authentication for your users.