diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts
index 89b34a1..9bda814 100644
--- a/backend/src/app.module.ts
+++ b/backend/src/app.module.ts
@@ -5,7 +5,7 @@ import { ConfigModule } from '@nestjs/config';
import { GraphQLISODateTime, GraphQLModule } from '@nestjs/graphql';
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
import { ApolloServerPluginLandingPageLocalDefault } from 'apollo-server-core';
-import { UsersModule } from './users/users.module';
+// import { UsersModule } from './users/users.module';
@Module({
imports: [
@@ -29,7 +29,7 @@ import { UsersModule } from './users/users.module';
resolvers: { DateTime: GraphQLISODateTime },
plugins: [ApolloServerPluginLandingPageLocalDefault()],
}),
- UsersModule,
+ // UsersModule,
],
controllers: [AppController],
providers: [],
diff --git a/backend/src/auth/supertokens/supertokens.service.ts b/backend/src/auth/supertokens/supertokens.service.ts
index 491c742..d2e4f25 100644
--- a/backend/src/auth/supertokens/supertokens.service.ts
+++ b/backend/src/auth/supertokens/supertokens.service.ts
@@ -46,15 +46,32 @@ export class SupertokensService {
}),
],
}),
- Session
- .init
- // {
- // jwt: {
- // enable: true,
- // issuer: `${process.env.APP_URL}/auth/api`,
- // },
- // }
- (),
+ Session.init({
+ // antiCsrf: "VIA_CUSTOM_HEADER",
+ jwt: {
+ enable: true,
+ issuer: `${process.env.APP_URL}/auth/api`,
+ },
+ override: {
+ functions: function (originalImplementation) {
+ return {
+ ...originalImplementation,
+ createNewSession: async function (input) {
+ input.accessTokenPayload = {
+ ...input.accessTokenPayload,
+ 'https://hasura.io/jwt/claims': {
+ 'x-hasura-user-id': input.userId,
+ 'x-hasura-default-role': 'user',
+ 'x-hasura-allowed-roles': ['user'],
+ },
+ };
+
+ return originalImplementation.createNewSession(input);
+ },
+ };
+ },
+ },
+ }),
],
});
}
diff --git a/backend/src/main.ts b/backend/src/main.ts
index 5f6da9a..2c55941 100644
--- a/backend/src/main.ts
+++ b/backend/src/main.ts
@@ -2,18 +2,18 @@ import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import supertokens from 'supertokens-node';
import { SupertokensExceptionFilter } from './auth/filters/auth.filter';
-import { PrismaService } from 'prisma/prisma.service';
+// import { PrismaService } from 'prisma/prisma.service';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.enableCors({
- origin: [process.env.WEBAPP_URL, 'https://studio.apollographql.com'],
+ origin: [process.env.WEBAPP_URL, 'http://server.home:8081'],
allowedHeaders: ['content-type', ...supertokens.getAllCORSHeaders()],
credentials: true,
});
app.useGlobalFilters(new SupertokensExceptionFilter());
- const prismaService = app.get(PrismaService);
- await prismaService.enableShutdownHooks(app);
+ // const prismaService = app.get(PrismaService);
+ // await prismaService.enableShutdownHooks(app);
await app.listen(process.env.APP_PORT);
}
diff --git a/backend/src/users/users.resolver.ts b/backend/src/users/users.resolver.ts
index 5e1e557..4335303 100644
--- a/backend/src/users/users.resolver.ts
+++ b/backend/src/users/users.resolver.ts
@@ -6,19 +6,19 @@ import { UsersService } from './users.service';
export class UsersResolver {
constructor(private readonly usersService: UsersService) {}
- @Mutation('createUser')
- create(@Args('createUserInput') createUserInput: Prisma.UserCreateInput) {
- return this.usersService.create(createUserInput);
- }
- @Query('users')
- findAll(@Args('params') params?: Prisma.UserFindManyArgs) {
- return this.usersService.users(params);
- }
+ // @Mutation('createUser')
+ // create(@Args('createUserInput') createUserInput: Prisma.UserCreateInput) {
+ // return this.usersService.create(createUserInput);
+ // }
+ // @Query('users')
+ // findAll(@Args('params') params?: Prisma.UserFindManyArgs) {
+ // return this.usersService.users(params);
+ // }
- @Query('user')
- findOne(@Args('id') id: string) {
- return this.usersService.user({ id });
- }
+ // @Query('user')
+ // findOne(@Args('id') id: string) {
+ // return this.usersService.user({ id });
+ // }
// @Mutation('updateUser')
// update(@Args('updateUserInput') updateUserInput: UpdateUserInput) {
diff --git a/backend/src/users/users.service.ts b/backend/src/users/users.service.ts
index 5e8469d..5a2416d 100644
--- a/backend/src/users/users.service.ts
+++ b/backend/src/users/users.service.ts
@@ -1,29 +1,29 @@
import { Injectable } from '@nestjs/common';
-import { Prisma, User } from '@prisma/client';
+// import { Prisma, User } from '@prisma/client';
import { PrismaService } from 'prisma/prisma.service';
@Injectable()
export class UsersService {
constructor(private readonly prismaService: PrismaService) {}
- async user(uniqueInput: Prisma.UserWhereUniqueInput) {
- return await this.prismaService.user.findUnique({ where: uniqueInput });
- }
+ // async user(uniqueInput: Prisma.UserWhereUniqueInput) {
+ // return await this.prismaService.user.findUnique({ where: uniqueInput });
+ // }
- async users(params?: Prisma.UserFindManyArgs) {
- return await this.prismaService.user.findMany(params);
- }
+ // async users(params?: Prisma.UserFindManyArgs) {
+ // return await this.prismaService.user.findMany(params);
+ // }
- create(createUserInput: Prisma.UserCreateInput) {
- return this.prismaService.user.create({ data: createUserInput });
- }
+ // create(createUserInput: Prisma.UserCreateInput) {
+ // return this.prismaService.user.create({ data: createUserInput });
+ // }
- update(id: string, userUpdateInput: Prisma.UserUpdateInput) {
- return this.prismaService.user.update({
- where: { id },
- data: userUpdateInput,
- });
- }
+ // update(id: string, userUpdateInput: Prisma.UserUpdateInput) {
+ // return this.prismaService.user.update({
+ // where: { id },
+ // data: userUpdateInput,
+ // });
+ // }
// remove(id: string) {
// return `This action removes a #${id} user`;
diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx
index 8f25039..a5fc245 100644
--- a/frontend/src/App.tsx
+++ b/frontend/src/App.tsx
@@ -11,7 +11,10 @@ SuperTokens.init({
apiBasePath: "/auth/api",
appName: "Fluxem",
},
- recipeList: [EmailPass.init(), Session.init()],
+ recipeList: [
+ EmailPass.init(),
+ Session.init(),
+ ],
});
const App: Component = () => {
diff --git a/frontend/src/hooks/auth/login.hook.ts b/frontend/src/hooks/auth/login.hook.ts
index 2a93c66..554752b 100644
--- a/frontend/src/hooks/auth/login.hook.ts
+++ b/frontend/src/hooks/auth/login.hook.ts
@@ -2,6 +2,7 @@ import { createSignal } from "solid-js";
import { createStore } from "solid-js/store";
import EmailPassRecipe from "supertokens-web-js/recipe/emailpassword";
+import Session from "supertokens-web-js/recipe/session";
const useLogin = () => {
const [loading, setLoading] = createSignal(false);
@@ -22,7 +23,7 @@ const useLogin = () => {
{ id: "password", value: form.password },
],
});
- console.log(login);
+ console.log(login)
} catch (error) {
console.error(error);
} finally {
@@ -30,7 +31,26 @@ const useLogin = () => {
}
};
- return { handleInput, loading, handleLogin, form };
+ const handleLogout = async () => {
+ const logout = await EmailPassRecipe.signOut();
+ };
+
+ const handleJwt = async () => {
+ const session = await Session.doesSessionExist();
+ if (session) {
+ let userId = await Session.getUserId();
+ let jwt = (await Session.getAccessTokenPayloadSecurely()).jwt;
+ // console.log(userId, jwt);
+ const {isVerified} = await EmailPassRecipe.isEmailVerified();
+ console.log(isVerified)
+ if(!isVerified) {
+ const sendEmail = await EmailPassRecipe.sendVerificationEmail()
+ console.log(sendEmail);
+ }
+ }
+ };
+
+ return { handleInput, loading, handleLogin, handleLogout, handleJwt, form };
};
export default useLogin;
diff --git a/frontend/src/routes/index.tsx b/frontend/src/routes/index.tsx
index f7d3398..c341bc7 100644
--- a/frontend/src/routes/index.tsx
+++ b/frontend/src/routes/index.tsx
@@ -5,7 +5,7 @@ const Home = lazy(() => import("./views/home/Home"));
const AuthLayout = lazy(() => import("./views/auth/AuthLayout"));
const Login = lazy(() => import("./views/auth/Login"));
const Register = lazy(() => import("./views/auth/Register"));
-
+const VerifyEmail = lazy(() => import("./views/auth/VerifyEmail"));
const AppRouter: Component = () => {
return (