React
If you would like to use the pre-built Scute UI with your react app, you can do so using the @scute/ui-react package. This package would expose the pre-built Auth and Profile components which you can use to easily integrate Scute to your current app.
Head over to the example project repo to clone and run this example project and check out the type docs for more scuteClient methods.
To get started, install our React SDKs with your favorite package manager:
npm install @scute/react @scute/ui-react`
Add your credentials to your environment variable handler:
VITE_SCUTE_APP_ID="YOUR_SCUTE_PROJECT_ID"
VITE_SCUTE_BASE_URL="YOUR_SCUTE_BASE_URL"
NOTE: If you are not using Vite, use "REACT_APP" as your prefix for your environment variables.
Initialize the Scute client
First initialize the Scute client using the createClient method exposed by @scute/react package:
// scute.js
import { createClient } from "@scute/react";
export const scute = createClient({
appId: import.meta.env.VITE_SCUTE_APP_ID,
baseUrl: import.meta.env.VITE_SCUTE_BASE_URL,
});
Wrap your React app with Scute AuthContextProvider
To be able to use the useScuteClient and useAuth hooks, wrap your app inside the Scute AuthContextProvider:
// App.jsx
import { AuthContextProvider } from "@scute/react";
import { scute } from "./scute";
export default function App() {
return (
<AuthContextProvider scuteClient={scute}>
{/* This is where the Prebuilt component and the rest of your application lives */}
</AuthContextProvider>
);
}
Add the Scute pre-built UI
First, create a component to show to your authenticated users:
// AuthenticatedView.jsx
import { Profile } from "@scute/ui-react";
import { useAuth, useScuteClient } from "@scute/react";
export const AuthenticatedView = () => {
const { session, user, signOut } = useAuth();
const scute = useScuteClient();
if (session.status === "loading") {
return null;
} else if (session.status === "unauthenticated") {
return <>unauthenticated</>;
}
return <Profile scuteClient={scute} language="en" />;
};
Then, create a component to switch between the authentication form and the AuthenticatedView based on the session status:
// ScuteUI.jsx
import { Auth } from "@scute/ui-react";
import { useScuteClient, useAuth } from "@scute/react";
import { AuthenticatedView } from "./AuthenticatedView";
export const ScuteUI = () => {
const { session } = useAuth();
const scute = useScuteClient();
if (session.status === "authenticated") {
return <AuthenticatedView />;
}
return (
<Auth
scuteClient={scute}
language="en"
policyURLs={{
privacyPolicy: "https://example.com/privacy",
termsOfService: "https://example.com/terms",
}}
logoUrl="https://example.com/logo.png"
/>
);
};
Finally, modify the App.jsx to render the ScuteUI inside the AuthContextProvider:
// App.jsx
import { AuthContextProvider } from "@scute/react";
import { scute } from "./scute";
import { ScuteUI } from "./ScuteUI";
export default function App() {
return (
<AuthContextProvider scuteClient={scute}>
<ScuteUI />
</AuthContextProvider>
);
}
Congrats! You have a working Scute instance now!
No session
With session (Profile)
With session (UserButton)
Component API's
Auth Component
| Property | Type | Default | Description |
|---|---|---|---|
| scuteClient | ScuteClient | undefined | The Scute client instance. This property is required |
| onSignIn? | () => void | undefined | Callback function for sign-in |
| webauthn? | "strict" | "optional" | "disabled" | "optional" | Options for WebAuthn |
| language? | string | "en" | Language setting |
| appearance? | ? | undefined | Appearance settings |
Profile Component
| Property | Type | Default | Description |
|---|---|---|---|
| scuteClient | ScuteClient | undefined | The Scute client instance |
| language? | string | "en" | Language setting |
UserButton Component
| Property | Type | Default | Description |
|---|---|---|---|
| scuteClient | ScuteClient | undefined | The Scute client instance |
| language? | string | "en" | Language setting |
| username? | string | undefined | Username to display |
| profileUrl? | string | undefined | Profile URL to navigate to |
| profilePictureUrl? | string | undefined | Profile picture URL |