Advertisement
Guest User

Untitled

a guest
Nov 13th, 2021
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { Injectable, UnauthorizedException, CanActivate, ExecutionContext } from '@nestjs/common';
  2. import { MikroORM } from '@mikro-orm/core';
  3. import { EntityManager } from '@mikro-orm/knex';
  4. import Session from 'supertokens-node/recipe/session';
  5.  
  6. import { User } from '../users/user.entity';
  7.  
  8. @Injectable()
  9. export class AuthGuard implements CanActivate {
  10.   constructor(
  11.     private readonly orm: MikroORM,
  12.     private readonly em: EntityManager,
  13.   ) { }
  14.  
  15.   async canActivate(context: ExecutionContext): Promise<boolean> {
  16.     const ctx = context.switchToHttp();
  17.  
  18.     let err = undefined;
  19.     const req = ctx.getRequest();
  20.     await Session.verifySession()(
  21.       req,
  22.       ctx.getResponse(),
  23.       (res) => {
  24.         err = res;
  25.       },
  26.     );
  27.  
  28.     if (err !== undefined) {
  29.       throw err;
  30.     }
  31.  
  32.     const userId = req.session.getUserId();
  33.  
  34.     const userRepository = this.em.getRepository(User);
  35.     const user: User = await userRepository.findOneOrFail({ id: userId }, [
  36.       'userProfile',
  37.       'readerProfile',
  38.       'authorProfiles',
  39.     ]);
  40.     if (!user) {
  41.       throw new UnauthorizedException();
  42.     }
  43.     req.user = user;
  44.  
  45.     return true;
  46.   }
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement