48 lines
2.1 KiB
Markdown
48 lines
2.1 KiB
Markdown
# Authentication
|
|
Authentication consists of the following parts:
|
|
* `next-auth` boilerplate
|
|
* `middleware.ts` = hooks-up `next-auth` into the page processing pipeline - user session is checked before any page is rendered
|
|
* `auth.ts` = defines how the authentication is done, and how session is checked (used by middleware)
|
|
* `/app/api/[...nextauth]/route.ts` = defines route which shows an authentication form
|
|
|
|
Source:
|
|
* [How to Implement Google Authentication in a Next.js App Using NextAuth](https://www.telerik.com/blogs/how-to-implement-google-authentication-nextjs-app-using-nextauth)
|
|
* [Next Js 14 Authentication on Edge Runtime](https://www.youtube.com/watch?v=rEopVx0FKGI)
|
|
|
|
# Multi-User Support
|
|
Each location record is marked with a user ID.
|
|
|
|
All the actions user `withUser` to fetch user ID, which is then used in all the DB operations.
|
|
|
|
# Deploying
|
|
The deployment is done via Docker:
|
|
* build docker image
|
|
* deploy Docker service
|
|
|
|
## Building Docker image
|
|
Run the following command:
|
|
```bash
|
|
docker build . -t utility-bills-tracker:1.0.0
|
|
```
|
|
The image will be stored in the local Docker instance.
|
|
|
|
## Deploying Docker service
|
|
Run the following command:
|
|
```bash
|
|
docker stack deploy \
|
|
-c docker-compose-deploy.yml \
|
|
utility-bills-tracker
|
|
```
|
|
|
|
# Implementation details
|
|
## Issues with HOSTNAME
|
|
When deplyed via docker and published via Cloudflare there's an issue with `HOSTNAME` env variable:
|
|
* if left unset, the server will use IP address assigned to container by Docker and **will not accept connections from outside**
|
|
* if set to "0.0.0.0" the server will serve static pages, but will *reject API calls when submitting form*
|
|
* if set to "rezije.app" the server will not start since the IP address it resolves with the given FQDN does not match any of the IP addresses assigned to the container
|
|
|
|
So there are the following issues:
|
|
* server will not accept external request - can be fixed by setting `HOSTNAME` to `0.0.0.0`
|
|
* server rejects API requests - can be fixed by adding `serverActions.allowedOrigins` option to `nextjs.config.js` file
|
|
|
|
So these are the fixes which were implemented in order to be able to run server in production. |