Home
Softono
vapor-auth-template

vapor-auth-template

Open source MIT Swift
241
Stars
35
Forks
4
Issues
11
Watchers
2 years
Last Commit

About vapor-auth-template

A Vapor 4 template with authentication, Fluent, JWT, Queues, repository pattern, testing and more.

Platforms

Web Self-hosted macOS iOS

Languages

Swift

Links

Vapor Authentication Template

Swift 5.2 Vapor 4

This package is a Vapor 4 template to showcase different features and include authentication functions needed for a lot of apps. It uses concepts such as: repository pattern, queues, jwt, fluent, testing and mailgun

The template can be cloned and configured/changed to fit your needs, but should give a good starting point to anyone new to Vapor.

Features

  • User registration
  • User login
  • Reset password
  • Email verification
  • Refresh and access tokens
  • Testing
  • JWT Authentication
  • Queues for email sending
  • Repository Pattern
  • Mailgun

Routes

URL HTTP Method Description Content (Body)
/api/auth/register POST Registers a user and sends email verification RegisterRequest
/api/auth/login POST Login with existing user (requires email verification) LoginRequest
/api/auth/email-verification GET Used to verify an email with a email verification token Query parameter token
/api/auth/email-verification POST (Re)sends email verification to a specific email SendEmailVerification
/api/auth/reset-password POST Sends reset-password email with token ResetPasswordRequest
/api/auth/reset-password/verify GET Verifies a given reset-password token Query parameter token
/api/auth/recover POST Changes user password with reset-password token supplied RecoverAccountRequest
/api/auth/me GET Returns the current authenticated user None
/api/auth/accessToken POST Gives the user a new accesstoken and refresh token AccessTokenRequest

Configuration

Environment variables

These environment variables will be used for configuring different services by default: | Key | Default Value | Description | |---------------------|--------------------------|-----------------------------------------------------------------------------------------------------| | POSTGRES_HOSTNAME | localhost | Postgres hostname | | POSTGRES_USERNAME | vapor | Postgres usernane | | POSTGRES_PASSWORD | password | Postgres password | | POSTGRES_DATABASE | vapor | Postgres database | | JWKS_KEYPAIR_FILE | keypair.jwks | JWKS Keypair file relative to root directory see "JWT" section for more info | | MAILGUN_API_KEY | None | Mailgun API Key | | SITE_API_URL | None | The URL where your API will be hosted ex: "https://api.myapp.com" (used for email-verification URL) | | SITE_FRONTEND_URL | None | The URL where your frontend will be hosted ex: "http://myapp.com" (used for reset-password URL) | | NO_REPLY_EMAIL | None | The no reply email that will be used for Mailgun | | REDIS_URL | redis://127.0.0.1:6379 | Redis URL for Queues worker. |

App config

AppConfig contains configuration like API URL, frontend URL and no-reply email. It loads from environment variables by default. Otherwise you can override it inside configure.swift:

app.config = .init(...)

Constants

Constants.swift contains constants releated to tokens lifetime. | Token | Lifetime | |--------------------------|------------| | Access Token | 15 minutes | | Refresh Token | 7 days | | Email Verification Token | 24 hours | | Reset Password Token | 1 hour |

Mailgun

The template uses VaporMailgunService and be configured as it states in the documentation. Extensions/Mailgun+Domains.swift contains the domains.

JWT

This package uses JWT for Access Tokens, and by default it loads JWT credentials from a JWKS file called keypair.jwks in the root directory. You can generate a JWKS keypair at https://mkjwk.org/