import {
ensurePasswordIsPresent,
ensureValidPassword,
ensureValidEmail,
createProviderId,
sanitizeAndSerializeProviderData,
createUser,
} from 'wasp/server/auth'
export const signup = async (args, context) => {
const { email, password, token } = args;
ensureValidEmail({ email });
ensurePasswordIsPresent({ password });
ensureValidPassword({ password });
const user = await context.entities.User.findFirst({
where: {
email,
tokens: {
some: {
value: token,
expiration_date: { gt: new Date() }
}
}
},
include: { tokens: true }
});
if (!user) {
throw new HttpError(400, 'Invalid or expired invitation token');
}
const providerId = createProviderId('email', email);
const providerData = await sanitizeAndSerializeProviderData({
hashedPassword: password,
isEmailVerified: true
});
await createUser(
providerId,
providerData,
{ id: user.id } // This will update the existing user
);
await context.entities.User.update({
where: { id: user.id },
data: {
tokens: { deleteMany: {} } // Remove the invitation token
}
});
// Note: createUser should handle session creation internally
return {
success: true,
message: 'User created successfully'
};
}
import {
ensurePasswordIsPresent,
ensureValidPassword,
ensureValidEmail,
createProviderId,
sanitizeAndSerializeProviderData,
createUser,
} from 'wasp/server/auth'
export const signup = async (args, context) => {
const { email, password, token } = args;
ensureValidEmail({ email });
ensurePasswordIsPresent({ password });
ensureValidPassword({ password });
const user = await context.entities.User.findFirst({
where: {
email,
tokens: {
some: {
value: token,
expiration_date: { gt: new Date() }
}
}
},
include: { tokens: true }
});
if (!user) {
throw new HttpError(400, 'Invalid or expired invitation token');
}
const providerId = createProviderId('email', email);
const providerData = await sanitizeAndSerializeProviderData({
hashedPassword: password,
isEmailVerified: true
});
await createUser(
providerId,
providerData,
{ id: user.id } // This will update the existing user
);
await context.entities.User.update({
where: { id: user.id },
data: {
tokens: { deleteMany: {} } // Remove the invitation token
}
});
// Note: createUser should handle session creation internally
return {
success: true,
message: 'User created successfully'
};
}