TryGhost / SDK

Tools for working with Ghost's APIs
MIT License
113 stars 77 forks source link

Creating a new member #489

Open JacobWeinbren opened 7 months ago

JacobWeinbren commented 7 months ago

Issue Summary

When attempting to add a new member using the Ghost Admin API within an Astro project, I encounter a ValidationError indicating a validation failure for the "email" field, despite ensuring the email is correctly formatted and present in the request payload.

Steps to Reproduce

  1. Set up a Ghost Admin API instance with the necessary configuration (URL, key, version).
  2. Create an endpoint in an Astro project to handle member sign-up, which collects an email address from a form submission and attempts to add a new member using api.members.add.
  3. Submit a valid email address through the form to trigger the endpoint.

Expected result: The member should be added successfully, and a success response should be returned.

Actual result: The operation fails with a ValidationError, specifically mentioning a validation failure for the "email" field, despite the email being present and correctly formatted in the request.

Technical Details

Ghost Version: v5.47.0

This issue seems to suggest that there might be a problem with how the Ghost Admin API is handling or validating the email field in the request. I have verified that the email is correctly formatted and included in the request payload, suggesting the issue might lie within the API or its validation logic.

Code

export const POST = async ({ request }) => {
    const formData = await request.formData();
    const email = formData.get("email");
    if (
        !email ||
        !email.match(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/)
    ) {
        return new Response(
            JSON.stringify({ message: "Invalid email address" }),
            { status: 400 }
        );
    }

    try {
        const response = await api.members.add({
            members: [{ email }],
        });
        console.log("Member created:", response);
        return new Response(
            JSON.stringify({ message: "Member created successfully" }),
            { status: 200 }
        );
    } catch (error) {
        console.error(error);
        return new Response(
            JSON.stringify({ message: "Error creating member" }),
            { status: 500 }
        );
    }
};
Tanu1201 commented 4 months ago

Hey, can I take this up?

chriseaton commented 1 month ago

I noticed a similar problem - the read operation on members shows in source you can lookup a member by e-mail, but attempting to do so results in a "Resource not found" error.