diff --git a/waspc/data/Generator/templates/server/src/auth/providers/email/signup.ts b/waspc/data/Generator/templates/server/src/auth/providers/email/signup.ts index 2e098163c4..f09ae85bfe 100644 --- a/waspc/data/Generator/templates/server/src/auth/providers/email/signup.ts +++ b/waspc/data/Generator/templates/server/src/auth/providers/email/signup.ts @@ -46,9 +46,9 @@ export function getSignupRoute({ const additionalFields = validateAndGetAdditionalFields(userFields); const user = await createUser({ + ...additionalFields, email: userFields.email, password: userFields.password, - ...additionalFields, }); const verificationLink = await createEmailVerificationLink(user, clientRoute); diff --git a/waspc/data/Generator/templates/server/src/auth/providers/local/signup.ts b/waspc/data/Generator/templates/server/src/auth/providers/local/signup.ts index 7c05984c18..af3701f25e 100644 --- a/waspc/data/Generator/templates/server/src/auth/providers/local/signup.ts +++ b/waspc/data/Generator/templates/server/src/auth/providers/local/signup.ts @@ -9,9 +9,9 @@ export default handleRejection(async (req, res) => { const additionalFields = validateAndGetAdditionalFields(userFields) await createUser({ + ...additionalFields, username: userFields.username, password: userFields.password, - ...additionalFields, }) return res.json({ success: true }) diff --git a/waspc/data/Generator/templates/server/src/auth/providers/types.ts b/waspc/data/Generator/templates/server/src/auth/providers/types.ts index b346ca761f..dfa896514b 100644 --- a/waspc/data/Generator/templates/server/src/auth/providers/types.ts +++ b/waspc/data/Generator/templates/server/src/auth/providers/types.ts @@ -20,17 +20,27 @@ export type InitData = { export type RequestWithWasp = Request & { wasp?: { [key: string]: any } } -export function createDefineAdditionalSignupFieldsFn() { +export function createDefineAdditionalSignupFieldsFn< + // Wasp already includes these fields in the signup process + ExistingFields extends keyof User, + PossibleAdditionalFields = Expand< + Partial> + > +>() { return function defineFields(config: { - [key in keyof Partial>]: FieldDefinition>[key]> + [key in keyof PossibleAdditionalFields]: FieldDefinition< + PossibleAdditionalFields[key] + > }) { return config } } type FieldDefinition = { - get: (data: Partial<{ - [key in keyof User]: unknown - }>) => T | undefined; - validate: (value: T | undefined) => void; + get: ( + data: Partial<{ + [key in keyof User]: unknown + }> + ) => T | undefined + validate: (value: T | undefined) => void } diff --git a/waspc/data/Generator/templates/server/src/auth/utils.ts b/waspc/data/Generator/templates/server/src/auth/utils.ts index 7e6c86bc46..8d6f1e973c 100644 --- a/waspc/data/Generator/templates/server/src/auth/utils.ts +++ b/waspc/data/Generator/templates/server/src/auth/utils.ts @@ -16,12 +16,14 @@ import { Email } from '../email/core/types.js'; {=& additionalSignupFieldsFn.importStatement =} {=/ additionalSignupFieldsFn.isDefined =} - {=# additionalSignupFieldsFn.isDefined =} const _waspAdditionalSignupFieldsConfig = {= additionalSignupFieldsFn.importIdentifier =} {=/ additionalSignupFieldsFn.isDefined =} {=^ additionalSignupFieldsFn.isDefined =} -const _waspAdditionalSignupFieldsConfig = {} +import { createDefineAdditionalSignupFieldsFn } from './providers/types.js' +const _waspAdditionalSignupFieldsConfig = {} as ReturnType< + ReturnType> +> {=/ additionalSignupFieldsFn.isDefined =} type {= userEntityUpper =}Id = {= userEntityUpper =}['id'] diff --git a/waspc/examples/todoApp/src/server/auth/signup.js b/waspc/examples/todoApp/src/server/auth/signup.ts similarity index 83% rename from waspc/examples/todoApp/src/server/auth/signup.js rename to waspc/examples/todoApp/src/server/auth/signup.ts index c1df199d81..9289010500 100644 --- a/waspc/examples/todoApp/src/server/auth/signup.js +++ b/waspc/examples/todoApp/src/server/auth/signup.ts @@ -2,7 +2,7 @@ import { defineAdditionalSignupFields } from '@wasp/types/index.js' export const fields = defineAdditionalSignupFields({ address: { - get: (data) => data.address, + get: (data) => data.address as string | undefined, validate: (value) => { if (!value || value.length < 5) { throw new Error('Address is required')