Skip to content

Guest Users

Guest accounts allow users to immediately start using your application without going through a full registration process. This feature is particularly useful for applications where you want to reduce friction in the user onboarding process.

Key Features

  • They are locally persisted, so guest users can leave and return to the same account on the same device.
  • Locally persisted sessions.
  • Fully functional embedded wallets.
  • Upgradeable to fully logged-in accounts.
  • They can be logged out and deleted as needed.

Implementation

Create a guest account (client-side)

Use the signUpGuest method from the Openfort SDK to create a guest account:

auth.tsx
import openfort from "./openfortConfig";
 
async function handleGuest() {
  try {
    const data = await openfort.auth.signUpGuest();
    // Handle successful guest registration
    // The response includes user information and authentication tokens
  } catch (error) {
    // Handle error
  }
}

Upon successful registration, you'll receive a response containing the user information and authentication tokens as shown in the JSON tab above.

const LoginOptions = () => {
  return (
    <div className="space-y-4">
      <Button onClick={handleGuest}>
        Continue as Guest
      </Button>
      <Button onClick={() => router.push("/login")}>
        Login or Create Account
      </Button>
    </div>
  );
};

Upgrade a guest user to a logged-in user

Simply call link method to enable the guest user to upgrade their account to a logged-in account using any authentication method of their choice.

Example Implementation

Here's a complete example of a guest authentication flow:

GuestAuth.jsx
import openfort from "./openfortConfig";
import { useState } from "react";
 
function GuestAuth() {
  const router = useRouter();
  const [status, setStatus] = useState(null);
 
  const handleGuest = async () => {
    setStatus({
      type: "loading",
      title: "Creating guest account...",
    });
 
    try {
      const data = await openfort.auth.signUpGuest();
      
      setStatus({
        type: "success",
        title: "Guest account created",
      });
      
      // Store credentials and redirect
      openfort.auth.storeCredentials({
        player: data.player.id,
        accessToken: data.token,
        refreshToken: data.refreshToken,
      });
      
      router.push("/");
    } catch (error) {
      setStatus({
        type: "error",
        title: "Error creating guest account",
      });
    }
  };
 
  return (
    <div>
      <Button onClick={handleGuest}>
        {status?.type === "loading" ? (
          <Loading />
        ) : (
          "Continue as Guest"
        )}
      </Button>
    </div>
  );
}