I'm following this tutorial https://www.youtube.com/watch?v=doDKaKDvB30 on how to make a login/registration feature with sveltekit and pocketbase.
Here's what the hooks.server.js looks like:
import PocketBase from 'pocketbase';
/** @type {import('@sveltejs/kit').Handle} */
export const handle = async ({event, resolve}) => {
event.locals.pb = new PocketBase('http://localhost:8090');
event.locals.pb.authStore.loadFromCookie(event.request.headers.get('cookie') || '');
if(event.locals.pb.authStore.isValid) {
event.locals.user = event.locals.pb.authStore.model;
}
const response = await resolve(event);
response.headers.set('set-cookie', event.locals.pb.authStore.exportToCookie({secure: false}));
return response;
}
and the +page.server.js for the register screen:
import { redirect } from '@sveltejs/kit';
/** @type {import('./$types').Actions} */
export const actions = {
register: async ({ locals, request }) => {
const formData = await request.formData();
const data = Object.fromEntries([...formData]);
try {
const newUser = await locals.pb.collection('users').create(data);
const {token, user} = await
locals.pb.collection('users').authWithPassword(data.email, data.password);
}
catch(err) {
console.log("Error: " + err);
return {
error: true,
message: err
}
}
throw redirect(303, "/");
},
};
But when I try to register a new user I get 2 errors:
TypeError: Cannot read properties of undefined (reading 'collection')
Data returned from action inside /register is not serializable: Cannot stringify arbitrary non-POJOs (data..message)
I think that is because the data in locals is not being sent to +page.server.js, but I don't know why. That's how it is done in the tutorial and it works!
I fixed it. It was a dumb mistake. My hooks.server.js was in /src/routes/ when it should have been in /src/.