import { json } from "@remix-run/node"; import type { LoaderFunctionArgs } from "@remix-run/node"; import { useLoaderData, Form, Link } from "@remix-run/react"; import { requireUserSession } from "~/lib/session.server"; import { githubApp } from "~/lib/github-app.server"; export async function loader({ request }: LoaderFunctionArgs) { const userSession = await requireUserSession(request); // Get additional user auth info from our store const userAuth = githubApp.getUserAuth(userSession.login); return json({ user: userSession, userAuth, allAuths: githubApp.getAllUserAuths(), // For debugging }); } export default function Dashboard() { const { user, userAuth, allAuths } = useLoaderData(); return (

GitHub App Dashboard

{/* User Info */}

User Information

{user.avatar_url && ( {user.login} )}

{user.name || user.login}

@{user.login}

{user.email && (

{user.email}

)}
{/* Auth Info */}

Authentication Status

Status:{' '} ✅ Authenticated

User ID: {user.userId}

{userAuth && ( <>

Authenticated At:{' '} {new Date(userAuth.authenticated_at).toLocaleString()}

{userAuth.state && (

State: {userAuth.state}

)} )}
{/* Debug Info */}

Debug Information

All authenticated users ({allAuths.length}):

                {JSON.stringify(allAuths, null, 2)}
              
{/* Usage Instructions */}

Next Steps

✅ User authentication is working!

🔧 Now you can use the authenticated user identity when GitHub triggers your app webhooks

📝 The user's authentication info is stored and can be retrieved using: githubApp.getUserAuth('{user.login}')

🔗 You can create an authenticated Octokit instance using:{' '} githubApp.getUserOctokit('{user.login}')

📦 Install GitHub App on Repositories
); }