import Head from "next/head" import Image from "ne...
# talk-kratos
b
import Head from "next/head" import Image from "next/image" import styles from "../styles/Home.module.css" import { useEffect, useState } from "react" import { useRouter } from "next/router" // highlight-start import { Configuration, V0alpha2Api, Session, Identity } from "@ory/client" import { edgeConfig } from "@ory/integrations/next" const ory = new V0alpha2Api(new Configuration(edgeConfig)) // Returns either the email or the username depending on the user's Identity Schema const getUserName = (identity: Identity) => identity.traits.email || identity.traits.username // highlight-end const Home = () => { const router = useRouter() // highlight-start const [session, setSession] = useState<Session | undefined>() useEffect(() => { ory .toSession() .then(({ data }) => { // User has a session! setSession(data) }) .catch(() => { // Redirect to login page return router.push(edgeConfig.basePath + "/ui/login") }) }) if (!session) { // Still loading return null } // highlight-end return ( <div className={styles.container}> <Head> <title>Create Next App</title> <meta name="description" content="Generated by create next app" /> <link rel="icon" href="/favicon.ico" /> </Head> <main className={styles.main}> <h1 className={styles.title}> Welcome to{" "} <a href="https://nextjs.org"> Next.js,{" "} { // highlight-next-line getUserName(session?.identity) } ! </a> </h1> <p className={styles.description}> Get started by editing{" "} <code className={styles.code}>pages/index.tsx</code> </p> <div className={styles.grid}> <a href="https://nextjs.org/docs" className={styles.card}> <h2>Documentation &rarr;</h2> <p>Find in-depth information about Next.js features and API.</p> </a> <a href="https://nextjs.org/learn" className={styles.card}> <h2>Learn &rarr;</h2> <p>Learn about Next.js in an interactive course with quizzes!</p> </a> <a href="https://github.com/vercel/next.js/tree/canary/examples" className={styles.card} > <h2>Examples &rarr;</h2> <p>Discover and deploy boilerplate example Next.js projects.</p> </a> <a href="https://vercel.com/new?utm_source=create-next-app&amp;utm_medium=default-template&amp;utm_campaign=create-next-app" className={styles.card} > <h2>Deploy &rarr;</h2> <p> Instantly deploy your Next.js site to a public URL with Vercel. </p> </a> </div> </main> <footer className={styles.footer}> <a href="https://vercel.com?utm_source=create-next-app&amp;utm_medium=default-template&amp;utm_campaign=create-next-app" target="_blank" rel="noopener noreferrer" > Powered by{" "} <span className={styles.logo}> <Image src="/vercel.svg" alt="Vercel Logo" width={72} height={16} /> </span> </a> </footer> </div> ) } export default Home