From 4ef415c5f526486b16240449bf66386911193095 Mon Sep 17 00:00:00 2001 From: Bernardo Amorim Date: Thu, 11 Feb 2021 22:22:19 -0300 Subject: [PATCH] feat: passwordless auth proof of concept --- .env.local.example | 3 +- components/SuccessDonation.tsx | 2 +- docker-compose.yml | 6 + helpers/mailer.ts | 53 +- package-lock.json | 23564 +++------------- pages/api/auth/[...nextauth].ts | 50 + pages/index.tsx | 11 + .../migration.sql | 37 + prisma/schema.prisma | 25 + 9 files changed, 4736 insertions(+), 19015 deletions(-) create mode 100644 pages/api/auth/[...nextauth].ts create mode 100644 prisma/migrations/20210211232718_add_minimum_requirements_for_next_auth/migration.sql diff --git a/.env.local.example b/.env.local.example index 0c5f899..31fad5f 100644 --- a/.env.local.example +++ b/.env.local.example @@ -4,4 +4,5 @@ PAGARME_ENC_KEY=PAGARME_TEST_ENVIRONMENT_ECRYPTION_KEY ROLLOUT_API_KEY=ROLLOUT_API_KEY HEROKU_APP_NAME=reditus-local-SOME_RANDOM_NUMBER MAILER_EMAIL=no-reply@reditus.org.br -MAILER_PASS=anything \ No newline at end of file +MAILER_PASS=anything +MAILER_SERVICE=mailhog \ No newline at end of file diff --git a/components/SuccessDonation.tsx b/components/SuccessDonation.tsx index bd3609b..f5133f3 100644 --- a/components/SuccessDonation.tsx +++ b/components/SuccessDonation.tsx @@ -257,7 +257,7 @@ export const SuccessDonation = (props: any) => { Agradecemos por escolher fazer parte dessa iniciativa. Enviaremos também um email de confirmação da sua doação.

- {registrationFlagEnabled() && !isUserAlreadyRegistered() && ( + {true && ( <>

Finalize seu cadastro no site!

+ } + {session && <> + Signed in as {session.user.email}
+ + } diff --git a/prisma/migrations/20210211232718_add_minimum_requirements_for_next_auth/migration.sql b/prisma/migrations/20210211232718_add_minimum_requirements_for_next_auth/migration.sql new file mode 100644 index 0000000..f2789d3 --- /dev/null +++ b/prisma/migrations/20210211232718_add_minimum_requirements_for_next_auth/migration.sql @@ -0,0 +1,37 @@ +-- AlterTable +ALTER TABLE "users" ADD COLUMN "email_verified" TIMESTAMP(3), +ADD COLUMN "updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP; + +-- CreateTable +CREATE TABLE "verification_requests" ( + "id" SERIAL NOT NULL, + "identifier" TEXT NOT NULL, + "token" TEXT NOT NULL, + "expires" TIMESTAMP(3) NOT NULL, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "sessions" ( + "id" SERIAL NOT NULL, + "user_id" INTEGER NOT NULL, + "expires" TIMESTAMP(3) NOT NULL, + "session_token" TEXT NOT NULL, + "access_token" TEXT NOT NULL, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "verification_requests.token_unique" ON "verification_requests"("token"); + +-- CreateIndex +CREATE UNIQUE INDEX "sessions.session_token_unique" ON "sessions"("session_token"); + +-- CreateIndex +CREATE UNIQUE INDEX "sessions.access_token_unique" ON "sessions"("access_token"); diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 39624ce..6065b73 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -55,6 +55,7 @@ model Contribution { model User { id Int @default(autoincrement()) @id email String @unique + emailVerified DateTime? @map(name: "email_verified") firstName String @map("first_name") lastName String @map("last_name") university String @@ -66,6 +67,30 @@ model User { contributions Contribution[] subscriptions ContributionSubscription[] createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @map(name: "updated_at") @@map("users") +} + +model VerificationRequest { + id Int @default(autoincrement()) @id + identifier String + token String @unique + expires DateTime + createdAt DateTime @default(now()) @map(name: "created_at") + updatedAt DateTime @default(now()) @map(name: "updated_at") + + @@map(name: "verification_requests") +} + +model Session { + id Int @default(autoincrement()) @id + userId Int @map(name: "user_id") + expires DateTime + sessionToken String @unique @map(name: "session_token") + accessToken String @unique @map(name: "access_token") + createdAt DateTime @default(now()) @map(name: "created_at") + updatedAt DateTime @default(now()) @map(name: "updated_at") + + @@map(name: "sessions") } \ No newline at end of file