I have built a React app that uses JSON:API to pull in data, but now I want to implement user registration.
JSON:API doesn't do user registration because it isn't a CRUD operation.
However, the links above explain that core provides a REST endpoint for handling user registration.
The documentation gives this example:
curl \
--header "Content-type: application/json" \
--request POST http://drupal.d8/user/register
But this example seems incomplete-- for example, where is the username?
My website is configured with the Email Registration module and only an email address is required to register, but where do I submit the email address?
EDIT: If you're answering this question, I will accept an answer that uses core's username/email address combo for registration; it doesn't have to be specific to the Email Registration module. The problem is that I can't find an example of how to register users with JSON:API, and there is no documentation.
Here's the code I tried in React:
UserRegistrationForm.tsx
import * as React from 'react';
import { useForm } from 'react-hook-form';
import { IonButton } from '@ionic/react';
import { baseUrl, basicHeaders } from '../utils/globals';
import handleErrors from '../utils/fetchHandleErrors';
interface InterfaceRegistrationFormInput {
email: string;
}
const UserRegistrationForm: React.VFC = () => {
const { register, handleSubmit, errors } = useForm<InterfaceRegistrationFormInput>();
const onSubmit = (formData: InterfaceRegistrationFormInput) => {
fetch(`${baseUrl}/user/register`, {
method: 'POST',
headers: basicHeaders,
body: formData,
})
.then(handleErrors)
.catch((error) => Promise.reject(new Error(error)));
};
return (
<>
<form onSubmit={handleSubmit(onSubmit)}>
<label htmlFor="email">
Email address
<br />
<input
name="email"
type="email"
ref={register({ required: true })}
/>
</label>
<IonButton type="submit">Register</IonButton>
</form>
</>
);
};