Send the new user a secure link, which includes their email address.
When they click the link, send them to a controller that verifies the link and creates a new user record, after first checking that they don't already exist.
Prompt the user to enter a password and password_confirmation then update their record and log them in.
@Snapey GDPR is exactly what I thought about too. For the moment I will create a simple signed URL and nothing related to the invitation will be stored in the database.