You might want to consider using routers as a good solution to your issue. See the Stripe Payment Processing example which shows how to handle three different types of visitors using routers: free (anonymous visitor), freemium (registered member), and premium (paid member).