First published 2025.02.03

Logging In With SolidID

  1. A Log In Button
<form
  action="/auth?/login"
  method="POST">
  <button>log in</button>
</form>
  1. Server-side form actions
export const actions = {
  login: async ({cookies, request}) => {
    const session = new Session({ keepAlive: false })
    cookies.set('session', session.info.sessionId, {path: '/'})
    await session.login({
      redirectUrl: host,
      oidcIssuer: sss,
      clientName: "Stucco Data Collective",
      handleRedirect: redirectToSolidIdentityProvider,
    })
  }
}
  1. Hook Handler
import { getSessionFromStorage } from "@inrupt/solid-client-authn-node"

export async function handle({ event, resolve }) {
  let sessionId = event.cookies.get('session')
  if (!sessionId) {
    event.locals.session = null
  } else {
    const session = await getSessionFromStorage(sessionId)
    if (session) {
      await session.handleIncomingRedirect(event.url.href)
      event.locals.session = session.info
    } else {
      event.locals.session = null
    }
  }

  const response = awai`t resolve(event)
  return response
}
  1. Using from Locals!