Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { Injectable, UnauthorizedException, CanActivate, ExecutionContext } from '@nestjs/common';
- import { MikroORM } from '@mikro-orm/core';
- import { EntityManager } from '@mikro-orm/knex';
- import Session from 'supertokens-node/recipe/session';
- import { User } from '../users/user.entity';
- @Injectable()
- export class AuthGuard implements CanActivate {
- constructor(
- private readonly orm: MikroORM,
- private readonly em: EntityManager,
- ) { }
- async canActivate(context: ExecutionContext): Promise<boolean> {
- const ctx = context.switchToHttp();
- let err = undefined;
- const req = ctx.getRequest();
- await Session.verifySession()(
- req,
- ctx.getResponse(),
- (res) => {
- err = res;
- },
- );
- if (err !== undefined) {
- throw err;
- }
- const userId = req.session.getUserId();
- const userRepository = this.em.getRepository(User);
- const user: User = await userRepository.findOneOrFail({ id: userId }, [
- 'userProfile',
- 'readerProfile',
- 'authorProfiles',
- ]);
- if (!user) {
- throw new UnauthorizedException();
- }
- req.user = user;
- return true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement