fix: fixed the timestamp comparison login in verifyPasswordlessTokens route

This commit is contained in:
Balu Babu
2023-01-13 01:46:34 +05:30
parent f4df8873be
commit 5fe934110e
4 changed files with 57 additions and 4 deletions

View File

@@ -215,8 +215,35 @@ export class AuthService {
statusCode: HttpStatus.NOT_FOUND,
});
const currentTime = DateTime.now().toISOTime();
//TODO: new to check this datetime checking logic
const user = await this.usersService.findUserById(
passwordlessTokens.value.userUid,
);
if (O.isNone(user))
return E.left({
message: USER_NOT_FOUND,
statusCode: HttpStatus.NOT_FOUND,
});
// Check to see if entry for magic-link is present in the Account table for this user
const profile = {
provider: 'email',
id: user.value.email,
};
const providerAccountExists = await this.checkIfProviderAccountExists(
user.value,
profile,
);
if (O.isNone(providerAccountExists)) {
await this.usersService.createProviderAccount(
user.value,
null,
null,
profile,
);
}
const currentTime = DateTime.now().toISO();
if (currentTime > passwordlessTokens.value.expiresOn.toISOString())
return E.left({
message: MAGIC_LINK_EXPIRED,

View File

@@ -3,10 +3,14 @@ import { PassportStrategy } from '@nestjs/passport';
import { Injectable } from '@nestjs/common';
import { UserService } from 'src/user/user.service';
import * as O from 'fp-ts/Option';
import { AuthService } from '../auth.service';
@Injectable()
export class GoogleStrategy extends PassportStrategy(Strategy) {
constructor(private usersService: UserService) {
constructor(
private usersService: UserService,
private authService: AuthService,
) {
super({
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
@@ -30,6 +34,18 @@ export class GoogleStrategy extends PassportStrategy(Strategy) {
return createdUser;
}
// Check to see if entry for google is present in the Account table for this user
const providerAccountExists =
await this.authService.checkIfProviderAccountExists(user.value, profile);
if (O.isNone(providerAccountExists))
await this.usersService.createProviderAccount(
user.value,
accessToken,
refreshToken,
profile,
);
return user.value;
}
}

View File

@@ -1,3 +1,8 @@
import { User } from '@prisma/client';
export type AuthUser = User;
export interface SSOProviderProfile {
provider: string;
id: string;
}

View File

@@ -1,6 +1,7 @@
import { Injectable } from '@nestjs/common';
import { PrismaService } from 'src/prisma/prisma.service';
import * as O from 'fp-ts/Option';
import { AuthUser, SSOProviderProfile } from 'src/types/AuthUser';
@Injectable()
export class UserService {
@@ -71,11 +72,15 @@ export class UserService {
async createProviderAccount(user, accessToken, refreshToken, profile) {
const createdProvider = await this.prisma.account.create({
data: {
userId: user.id,
provider: profile.provider,
providerAccountId: profile.id,
providerRefreshToken: refreshToken ? refreshToken : null,
providerAccessToken: accessToken ? accessToken : null,
user: {
connect: {
id: user.id,
},
},
},
});