api design – What’s the best way to collect custom data (email addresses) in Prosody?

I’m using Prosody as the engine for an XMPP-based game service and app I’m developing, and need a way for users to sign up for the service. While signing up, it would be nice to have a CAPTCHA or other spam-blocker and some way to collect valid email addresses.

I’m aware of mod_register_ibr (which implements the registration part of XEP-0077, but that only saves a username and password without allowing for custom properties. The way I see it, I have three options:

  1. Have a two-step registration process, where one first registers on Prosody using mod_register_ibr and then enters additional info through another XEP-0077 endpoint exposed by my gaming service. (This can be combined into one step on the frontend/client so it doesn’t seem cumbersome to the user).
  2. Have a non-XMPP way for people to register: for example through a webpage or REST API. This could run the appropriate prosodyctl commands on the server to register the user in Prosody, or manipulate the database directly if it’s possible and I figure out how.
  3. Write a custom Lua module which reimplements XEP-0077 but asking for additional info as well this time. (Caveat: I’d have to figure out how to incorporate this info in Prosody’s database or set up a custom database or table for that).

Which of these would you recommend, in terms of how neat/non-complex it is as well as how long it would take to implement? Or does anyone have any better suggestions?

PS: I think this is a more appropriate place to post this question than StackOverflow, but correct me if I’m wrong!