Skip to content

Commit

Permalink
feat: save email verification token into column for user
Browse files Browse the repository at this point in the history
  • Loading branch information
rahul-rocket committed Nov 21, 2022
1 parent 64397d5 commit 30c3847
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 3 deletions.
1 change: 1 addition & 0 deletions packages/contracts/src/user.model.ts
Expand Up @@ -34,6 +34,7 @@ export interface IUser extends IBasePerTenantEntityModel {
code?: number;
codeExpireAt?: Date;
emailVerifiedAt?: Date;
emailToken?: string;
}

export interface IUserFindInput extends IBasePerTenantEntityModel {
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/auth/email-confirmation.service.ts
Expand Up @@ -4,13 +4,15 @@ import { ConfigService, environment } from '@gauzy/config';
import { IUser, IVerificationTokenPayload } from '@gauzy/contracts';
import { sign } from 'jsonwebtoken';
import { EmailService } from './../email/email.service';
import { UserService } from './../user/user.service';

@Injectable()
export class EmailConfirmationService {

constructor(
private readonly configService: ConfigService,
private readonly emailService: EmailService,
private readonly userService: UserService
) {}

/**
Expand All @@ -29,6 +31,10 @@ export class EmailConfirmationService {
});
const url = `${this.configService.get('EMAIL_CONFIRMATION_URL')}?email=${email}&token=${token}`;

// update email token field for user
await this.userService.update(id, {
emailToken: token
});
// send email verfication link
return this.emailService.emailVerification(user, url);
} catch (error) {
Expand Down
@@ -1,9 +1,9 @@

import { MigrationInterface, QueryRunner } from "typeorm";

export class AlterUserTableEmailVerificationColumn1668592360338 implements MigrationInterface {
export class AlterUserTableEmailVerificationColumns1669033406667 implements MigrationInterface {

name = 'AlterUserTableEmailVerificationColumn1668592360338';
name = 'AlterUserTableEmailVerificationColumns1669033406667';

/**
* Up Migration
Expand Down Expand Up @@ -38,6 +38,7 @@ export class AlterUserTableEmailVerificationColumn1668592360338 implements Migra
*/
public async postgresUpQueryRunner(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`ALTER TABLE "user" ADD "emailVerifiedAt" TIMESTAMP`);
await queryRunner.query(`ALTER TABLE "user" ADD "emailToken" character varying`);
}

/**
Expand All @@ -46,6 +47,7 @@ export class AlterUserTableEmailVerificationColumn1668592360338 implements Migra
* @param queryRunner
*/
public async postgresDownQueryRunner(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "emailToken"`);
await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "emailVerifiedAt"`);
}

Expand All @@ -62,7 +64,7 @@ export class AlterUserTableEmailVerificationColumn1668592360338 implements Migra
await queryRunner.query(`DROP INDEX "IDX_58e4dbff0e1a32a9bdc861bb29"`);
await queryRunner.query(`DROP INDEX "IDX_19de43e9f1842360ce646253d7"`);
await queryRunner.query(`DROP INDEX "IDX_685bf353c85f23b6f848e4dcde"`);
await queryRunner.query(`CREATE TABLE "temporary_user" ("id" varchar PRIMARY KEY NOT NULL, "createdAt" datetime NOT NULL DEFAULT (datetime('now')), "updatedAt" datetime NOT NULL DEFAULT (datetime('now')), "tenantId" varchar, "thirdPartyId" varchar, "firstName" varchar, "lastName" varchar, "email" varchar, "username" varchar, "hash" varchar, "imageUrl" varchar(500), "preferredLanguage" varchar DEFAULT ('en'), "preferredComponentLayout" varchar CHECK( "preferredComponentLayout" IN ('CARDS_GRID','TABLE') ) DEFAULT ('TABLE'), "roleId" varchar, "refreshToken" varchar, "isActive" boolean DEFAULT (1), "code" integer, "codeExpireAt" datetime, "emailVerifiedAt" datetime, CONSTRAINT "FK_c28e52f758e7bbc53828db92194" FOREIGN KEY ("roleId") REFERENCES "role" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_685bf353c85f23b6f848e4dcded" FOREIGN KEY ("tenantId") REFERENCES "tenant" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)`);
await queryRunner.query(`CREATE TABLE "temporary_user" ("id" varchar PRIMARY KEY NOT NULL, "createdAt" datetime NOT NULL DEFAULT (datetime('now')), "updatedAt" datetime NOT NULL DEFAULT (datetime('now')), "tenantId" varchar, "thirdPartyId" varchar, "firstName" varchar, "lastName" varchar, "email" varchar, "username" varchar, "hash" varchar, "imageUrl" varchar(500), "preferredLanguage" varchar DEFAULT ('en'), "preferredComponentLayout" varchar CHECK( "preferredComponentLayout" IN ('CARDS_GRID','TABLE') ) DEFAULT ('TABLE'), "roleId" varchar, "refreshToken" varchar, "isActive" boolean DEFAULT (1), "code" integer, "codeExpireAt" datetime, "emailVerifiedAt" datetime, "emailToken" varchar, CONSTRAINT "FK_c28e52f758e7bbc53828db92194" FOREIGN KEY ("roleId") REFERENCES "role" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT "FK_685bf353c85f23b6f848e4dcded" FOREIGN KEY ("tenantId") REFERENCES "tenant" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)`);
await queryRunner.query(`INSERT INTO "temporary_user"("id", "createdAt", "updatedAt", "tenantId", "thirdPartyId", "firstName", "lastName", "email", "username", "hash", "imageUrl", "preferredLanguage", "preferredComponentLayout", "roleId", "refreshToken", "isActive", "code", "codeExpireAt") SELECT "id", "createdAt", "updatedAt", "tenantId", "thirdPartyId", "firstName", "lastName", "email", "username", "hash", "imageUrl", "preferredLanguage", "preferredComponentLayout", "roleId", "refreshToken", "isActive", "code", "codeExpireAt" FROM "user"`);
await queryRunner.query(`DROP TABLE "user"`);
await queryRunner.query(`ALTER TABLE "temporary_user" RENAME TO "user"`);
Expand Down
6 changes: 6 additions & 0 deletions packages/core/src/user/user.entity.ts
Expand Up @@ -102,9 +102,15 @@ export class User extends TenantBaseEntity implements IUser {
public codeExpireAt?: Date;

@ApiPropertyOptional({ type: () => Date })
@Exclude({ toPlainOnly: true })
@Column({ nullable: true })
public emailVerifiedAt?: Date;

@ApiPropertyOptional({ type: () => String })
@Exclude({ toPlainOnly: true })
@Column({ nullable: true })
public emailToken?: string;

name?: string;
employeeId?: string;

Expand Down

0 comments on commit 30c3847

Please sign in to comment.