I always used coova-chilli. Which usually needs a backend server for freeradius.
coova-chilli is the most flexible CP (Captive Portal), also used in commercial installations, but it has a steep learning curve, as quite some docs flaoting around on the web are outdated.
nodogsplash might be simpler alternative.