chore: user displayName and photoURL property updates itself when found with SSO providers
This commit is contained in:
@@ -4,6 +4,7 @@ import { Injectable, UnauthorizedException } from '@nestjs/common';
|
|||||||
import { AuthService } from '../auth.service';
|
import { AuthService } from '../auth.service';
|
||||||
import { UserService } from 'src/user/user.service';
|
import { UserService } from 'src/user/user.service';
|
||||||
import * as O from 'fp-ts/Option';
|
import * as O from 'fp-ts/Option';
|
||||||
|
import * as E from 'fp-ts/Either';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class GithubStrategy extends PassportStrategy(Strategy) {
|
export class GithubStrategy extends PassportStrategy(Strategy) {
|
||||||
@@ -33,6 +34,16 @@ export class GithubStrategy extends PassportStrategy(Strategy) {
|
|||||||
return createdUser;
|
return createdUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!user.value.displayName || !user.value.photoURL) {
|
||||||
|
const updatedUser = await this.usersService.updateUserDetails(
|
||||||
|
user.value,
|
||||||
|
profile,
|
||||||
|
);
|
||||||
|
if (E.isLeft(updatedUser)) {
|
||||||
|
throw new UnauthorizedException(updatedUser.left);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* * Check to see if entry for Github is present in the Account table for user
|
* * Check to see if entry for Github is present in the Account table for user
|
||||||
* * If user was created with another provider findUserByEmail may return true
|
* * If user was created with another provider findUserByEmail may return true
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
import { Strategy, VerifyCallback } from 'passport-google-oauth20';
|
import { Strategy, VerifyCallback } from 'passport-google-oauth20';
|
||||||
import { PassportStrategy } from '@nestjs/passport';
|
import { PassportStrategy } from '@nestjs/passport';
|
||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable, UnauthorizedException } from '@nestjs/common';
|
||||||
import { UserService } from 'src/user/user.service';
|
import { UserService } from 'src/user/user.service';
|
||||||
import * as O from 'fp-ts/Option';
|
import * as O from 'fp-ts/Option';
|
||||||
import { AuthService } from '../auth.service';
|
import { AuthService } from '../auth.service';
|
||||||
|
import * as E from 'fp-ts/Either';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class GoogleStrategy extends PassportStrategy(Strategy) {
|
export class GoogleStrategy extends PassportStrategy(Strategy) {
|
||||||
@@ -33,6 +34,16 @@ export class GoogleStrategy extends PassportStrategy(Strategy) {
|
|||||||
return createdUser;
|
return createdUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!user.value.displayName || !user.value.photoURL) {
|
||||||
|
const updatedUser = await this.usersService.updateUserDetails(
|
||||||
|
user.value,
|
||||||
|
profile,
|
||||||
|
);
|
||||||
|
if (E.isLeft(updatedUser)) {
|
||||||
|
throw new UnauthorizedException(updatedUser.left);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* * Check to see if entry for Google is present in the Account table for user
|
* * Check to see if entry for Google is present in the Account table for user
|
||||||
* * If user was created with another provider findUserByEmail may return true
|
* * If user was created with another provider findUserByEmail may return true
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { Injectable, UnauthorizedException } from '@nestjs/common';
|
|||||||
import { AuthService } from '../auth.service';
|
import { AuthService } from '../auth.service';
|
||||||
import { UserService } from 'src/user/user.service';
|
import { UserService } from 'src/user/user.service';
|
||||||
import * as O from 'fp-ts/Option';
|
import * as O from 'fp-ts/Option';
|
||||||
|
import * as E from 'fp-ts/Either';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class MicrosoftStrategy extends PassportStrategy(Strategy) {
|
export class MicrosoftStrategy extends PassportStrategy(Strategy) {
|
||||||
@@ -33,6 +34,16 @@ export class MicrosoftStrategy extends PassportStrategy(Strategy) {
|
|||||||
return createdUser;
|
return createdUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!user.value.displayName || !user.value.photoURL) {
|
||||||
|
const updatedUser = await this.usersService.updateUserDetails(
|
||||||
|
user.value,
|
||||||
|
profile,
|
||||||
|
);
|
||||||
|
if (E.isLeft(updatedUser)) {
|
||||||
|
throw new UnauthorizedException(updatedUser.left);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* * Check to see if entry for Microsoft is present in the Account table for user
|
* * Check to see if entry for Microsoft is present in the Account table for user
|
||||||
* * If user was created with another provider findUserByEmail may return true
|
* * If user was created with another provider findUserByEmail may return true
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
import { PrismaService } from 'src/prisma/prisma.service';
|
import { PrismaService } from 'src/prisma/prisma.service';
|
||||||
import * as O from 'fp-ts/Option';
|
import * as O from 'fp-ts/Option';
|
||||||
|
import * as E from 'fp-ts/Either';
|
||||||
import { AuthUser } from 'src/types/AuthUser';
|
import { AuthUser } from 'src/types/AuthUser';
|
||||||
|
import { USER_NOT_FOUND } from 'src/errors';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class UserService {
|
export class UserService {
|
||||||
@@ -91,4 +93,21 @@ export class UserService {
|
|||||||
|
|
||||||
return createdProvider;
|
return createdProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async updateUserDetails(user: AuthUser, profile) {
|
||||||
|
try {
|
||||||
|
const updatedUser = await this.prisma.user.update({
|
||||||
|
where: {
|
||||||
|
uid: user.uid,
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
displayName: !profile.displayName ? null : profile.displayName,
|
||||||
|
photoURL: !profile.photos ? null : profile.photos[0].value,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return E.right(updatedUser);
|
||||||
|
} catch (error) {
|
||||||
|
return E.left(USER_NOT_FOUND);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user