Authentication
Houdini’s support for user sessions comes in 2 parts. First, you need to add a hooks.server.js
file that defines the
session for that user:
src/hooks.server.ts
import { setSession } from '$houdini'
import type { Handle } from '@sveltejs/kit'
export const handle: Handle = async ({ event, resolve }) => {
// get the user information however you want
const user = await authenticateUser(event)
// set the session information for this event
setSession(event, { user })
// pass the event onto the default handle
return await resolve(event)
}
src/hooks.server.js
import { setSession } from '$houdini'
/* @type { import('@sveltejs/kit').Handle } */
export const handle = async ({ event, resolve }) => {
// get the user information however you want
const user = await authenticateUser(event)
// set the session information for this event
setSession(event, { user })
// pass the event onto the default handle
return await resolve(event)
}
Then, you can use the session
parameter passed to your client’s network function to access the information:
src/client.ts
import { HoudiniClient } from '$houdini'
export default new HoudiniClient({
url: 'http://localhost:4000/graphql',
fetchParams({ session }) {
return {
headers: {
Authorization: `Bearer ${session?.user.token}`,
}
}
}
})
src/client.js
import { HoudiniClient } from '$houdini'
export default new HoudiniClient({
url: 'http://localhost:4000/graphql',
fetchParams({ session }) {
return {
headers: {
Authorization: `Bearer ${session?.user.token}`,
},
}
},
})
Tip: If your API uses HTTP-Only cookies, don’t forget to add credentials: "include"
to fetchParams
’ return value