LaunchFast Logo LaunchFast

Introducing Paid and Protected Pages

LaunchFa.st comes with baked-in paid and protected page(s) to help you prevent un-paid and un-authenticated users access such pages. With the payment methods such as Stripe and Lemon Squeezy integrated in LaunchFa.st and authentication methods such as Google, Twitter and Credentials, such payment callbacks’ and user authentication methods can be used by your system to grant access only to the paid and authenticated users to paid and protected pages in your application.

Here’s how easily you can create paid and protected pages with LaunchFa.st:

  • Create a file, say paid_and_protected.astro with the following code:
---
// File: src/pages/paid_and_protected.astro

import redis from '@/lib/db/upstash'
import { getSession } from '@/lib/utils/auth'

const session: any = getSession(Astro.cookies)

if (!session) return webResponse('Unauthorized', 403, {})

if (session?.email) {
  const paid = await redis.hget('access', session.email)
  if (paid !== 1) return webResponse('Unauthorized', 403, {})
}
---

<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
  </head>
  <body class="font-display">
    <div class="relative mx-auto flex max-w-7xl flex-col px-8 py-8">
      <h1 class="pb-6 text-3xl font-medium text-launchfast">Paid and Protected Content!</h1>
    </div>
  </body>
</html>
  • That’s it! The Upstash Redis instance integrated in the LaunchFa.st boilerplate takes care of fetching the user paid status and the getSession function takes care of decoding the user authentication status. If unauthorized or not paid, a 403 response is sent enforcing pay and authentication based access to the content.

Worry not, with LaunchFa.st you get such a page paid_and_protected.astro built for you with goodies on top.

Learn More Using Firebase Realtime Database in Astro with Vue: A Step-by-Step Guide → Authenticating users in Astro with Clerk and React: A Step-by-Step Guide → Deploy Astro to AWS Elasic Beanstalk: A Step-by-Step Guide →