Skip to content

React Frontend Example

OAuth integration with React.

Login Component

tsx
import { startOAuth } from "auth-kit-js/frontend";

export function LoginPage() {
  const handleGoogle = () => {
    startOAuth({
      provider: "google",
      clientId: import.meta.env.VITE_GOOGLE_CLIENT_ID,
      redirectUri: "http://localhost:3000/auth/google/callback",
      usePKCE: true,
    });
  };

  const handleFacebook = () => {
    startOAuth({
      provider: "facebook",
      clientId: import.meta.env.VITE_FACEBOOK_APP_ID,
      redirectUri: "http://localhost:3000/auth/facebook/callback",
    });
  };

  return (
    <div>
      <h1>Login</h1>
      <button onClick={handleGoogle}>Sign in with Google</button>
      <button onClick={handleFacebook}>Sign in with Facebook</button>
    </div>
  );
}

Callback Handler

tsx
import { useEffect } from "react";
import { validateState } from "auth-kit-js/frontend";

export function CallbackPage() {
  useEffect(() => {
    const params = new URLSearchParams(window.location.search);
    const state = params.get("state");

    if (state && validateState(state)) {
      // State is valid, server will exchange the code
      console.log("OAuth callback successful");
    }
  }, []);

  return <div>Processing...</div>;
}

Auth Context

tsx
import { createContext, useContext, useState } from "react";

const AuthContext = createContext(null);

export function AuthProvider({ children }) {
  const [user, setUser] = useState(null);
  const [token, setToken] = useState(localStorage.getItem("token"));

  const login = (userData, authToken) => {
    setUser(userData);
    setToken(authToken);
    localStorage.setItem("token", authToken);
  };

  const logout = () => {
    setUser(null);
    setToken(null);
    localStorage.removeItem("token");
  };

  return (
    <AuthContext.Provider value={{ user, token, login, logout }}>
      {children}
    </AuthContext.Provider>
  );
}

export const useAuth = () => useContext(AuthContext);

Released under the MIT License.