nik2208.2208
12/28/2023, 5:07 PMnik2208.2208
12/28/2023, 5:17 PM{
"errors": [
{
"message": "Cannot read properties of undefined (reading 'method')",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"tests"
],
"extensions": {
"code": "INTERNAL_SERVER_ERROR",
"stacktrace": [
"TypeError: Cannot read properties of undefined (reading 'method')",
" at ExpressRequest.getMethod (/Users/nicola/Devel/temp/test-nest-app/node_modules/supertokens-node/lib/build/framework/express/framework.js:50:61)",
" at Object.verifySession (/Users/nicola/Devel/temp/test-nest-app/node_modules/supertokens-node/lib/build/recipe/session/api/implementation.js:23:66)",
" at SessionRecipe.verifySession (/Users/nicola/Devel/temp/test-nest-app/node_modules/supertokens-node/lib/build/recipe/session/recipe.js:154:39)",
" at /Users/nicola/Devel/temp/test-nest-app/node_modules/supertokens-node/lib/build/recipe/session/framework/express.js:34:47",
" at AuthGuard.canActivate (/Users/nicola/Devel/temp/test-nest-app/src/auth/auth.guard.ts:17:44)",
" at GuardsConsumer.tryActivate
...
nik2208.2208
12/28/2023, 5:19 PMawait verifySession(this.verifyOptions)(
ctx.getRequest(),
resp,
(res) => {
err = res;
},
);
in the suggested auth guard coderp_st
12/28/2023, 5:35 PMrp_st
12/28/2023, 5:36 PMnik2208.2208
12/28/2023, 6:04 PMtypescript
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { Error as STError } from "supertokens-node";
import { verifySession } from 'supertokens-node/recipe/session/framework/express';
import { VerifySessionOptions } from 'supertokens-node/recipe/session';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private readonly verifyOptions?: VerifySessionOptions) { }
async canActivate(context: ExecutionContext): Promise<boolean> {
const ctx = context.switchToHttp();
let err = undefined;
const resp = ctx.getResponse();
// You can create an optional version of this by passing {sessionRequired: false} to verifySession
await verifySession(this.verifyOptions)(
ctx.getRequest(),
resp,
(res) => {
err = res;
},
);
if (resp.headersSent) {
throw new STError({
message: "RESPONSE_SENT",
type: "RESPONSE_SENT",
});
}
if (err) {
throw err;
}
return true;
}
}
rp_st
12/28/2023, 6:06 PMnik2208.2208
12/28/2023, 6:08 PMrp_st
12/28/2023, 6:08 PMrp_st
12/28/2023, 6:08 PMnik2208.2208
12/28/2023, 6:09 PMrp_st
12/28/2023, 6:09 PMnik2208.2208
12/28/2023, 6:10 PMrp_st
12/28/2023, 6:12 PMnik2208.2208
12/28/2023, 6:12 PMtypescript
async findAll(@Context('req') req: Request, @Context('res') res: Response) {
try {
const session = await Session.getSession(req, res);
const userId = session.getUserId();
console.log(userId);
} catch (err) {
if (Session.Error.isErrorFromSuperTokens(err)) {
throw new GraphQLError('Session related error', {
extensions: {
code: 'UNAUTHENTICATED',
http: { status: err.type === Session.Error.INVALID_CLAIMS ? 403 : 401 },
},
});
}
}
`
how can i be sure to set correctly the cookie on the graphql playground which doesnt face a login process?rp_st
12/28/2023, 6:13 PMnik2208.2208
12/28/2023, 6:14 PMrp_st
12/28/2023, 6:14 PMnik2208.2208
12/28/2023, 6:18 PMbash
TypeError: Cannot read properties of undefined (reading 'wrapperUsed')
at Object.getSessionFromRequest (/Users/nicola/Devel/temp/test-nest-app/node_modules/supertokens-node/lib/build/recipe/session/sessionRequestFunctions.js:28:18)
at Function.getSession (/Users/nicola/Devel/temp/test-nest-app/node_modules/supertokens-node/lib/build/recipe/session/index.js:151:42)
at TestsResolver.findAll (/Users/nicola/Devel/temp/test-nest-app/src/tests/tests.resolver.ts:26:37)
at /Users/nicola/Devel/temp/test-nest-app/node_modules/@nestjs/core/helpers/external-context-creator.js:67:33
at processTicksAndRejections (node:internal/process/task_queues:95:5)
at async target (/Users/nicola/Devel/temp/test-nest-app/node_modules/@nestjs/core/helpers/external-context-creator.js:74:28)
at async Object.tests (/Users/nicola/Devel/temp/test-nest-app/node_modules/@nestjs/core/helpers/external-proxy.js:9:24) {stack: 'TypeError: Cannot read properties of undefine…/@nestjs/core/helpers/external-proxy.js:9:24)', message: 'Cannot read properties of undefined (reading 'wrapperUsed')'}
`
rp_st
12/28/2023, 6:18 PMrp_st
12/28/2023, 6:18 PMnik2208.2208
12/28/2023, 6:20 PMbash
TypeError: Cannot read properties of undefined (reading 'method')
at ExpressRequest.getMethod (/Users/nicola/Devel/temp/test-nest-app/node_modules/supertokens-node/lib/build/framework/express/framework.js:50:61)
at Object.verifySession (/Users/nicola/Devel/temp/test-nest-app/node_modules/supertokens-node/lib/build/recipe/session/api/implementation.js:23:66)
at SessionRecipe.verifySession (/Users/nicola/Devel/temp/test-nest-app/node_modules/supertokens-node/lib/build/recipe/session/recipe.js:154:39)
at /Users/nicola/Devel/temp/test-nest-app/node_modules/supertokens-node/lib/build/recipe/session/framework/express.js:34:47
at AuthGuard.canActivate (/Users/nicola/Devel/temp/test-nest-app/src/auth/auth.guard.ts:17:44)
at GuardsConsumer.tryActivate (/Users/nicola/Devel/temp/test-nest-app/node_modules/@nestjs/core/guards/guards-consumer.js:15:34)
at canActivateFn (/Users/nicola/Devel/temp/test-nest-app/node_modules/@nestjs/core/helpers/external-context-creator.js:155:59)
at target (/Users/nicola/Devel/temp/test-nest-app/node_modules/@nestjs/core/helpers/external-context-creator.js:73:37)
at Object.tests (/Users/nicola/Devel/temp/test-nest-app/node_modules/@nestjs/core/helpers/external-proxy.js:9:30)
at /Users/nicola/Devel/temp/test-nest-app/node_modules/@apollo/server/src/utils/schemaInstrumentation.ts:82:22 {stack: 'TypeError: Cannot read properties of undefine…rver/src/utils/schemaInstrumentation.ts:82:22', message: 'Cannot read properties of undefined (reading 'method')'}
`
rp_st
12/28/2023, 6:22 PMrp_st
12/28/2023, 6:23 PMnik2208.2208
12/28/2023, 6:23 PMnik2208.2208
12/28/2023, 6:24 PMnik2208.2208
12/28/2023, 6:25 PMrp_st
12/28/2023, 6:25 PMnik2208.2208
12/28/2023, 6:26 PMrp_st
12/28/2023, 6:26 PMnik2208.2208
12/28/2023, 6:32 PMrp_st
12/28/2023, 6:33 PMnik2208.2208
12/28/2023, 6:33 PMnik2208.2208
12/28/2023, 6:33 PMrp_st
12/28/2023, 6:33 PMnik2208.2208
12/28/2023, 6:34 PMrp_st
12/28/2023, 6:34 PMnik2208.2208
12/28/2023, 6:35 PMrp_st
12/28/2023, 6:38 PMrp_st
12/28/2023, 6:38 PMnik2208.2208
12/28/2023, 6:43 PMbash
Error: Session does not exist. Are you sending the session tokens in the request with the appropriate token transfer method?
at Object.getSession (/Users/nicola/Devel/temp/test-nest-app/node_modules/supertokens-node/lib/build/recipe/session/recipeImplementation.js:148:23)
at Object.getSessionFromRequest (/Users/nicola/Devel/temp/test-nest-app/node_modules/supertokens-node/lib/build/recipe/session/sessionRequestFunctions.js:123:47)
at Function.getSession (/Users/nicola/Devel/temp/test-nest-app/node_modules/supertokens-node/lib/build/recipe/session/index.js:151:42)
at TestsResolver.findAll (/Users/nicola/Devel/temp/test-nest-app/src/tests/tests.resolver.ts:26:37)
at /Users/nicola/Devel/temp/test-nest-app/node_modules/@nestjs/core/helpers/external-context-creator.js:67:33
at processTicksAndRejections (node:internal/process/task_queues:95:5)
at async target (/Users/nicola/Devel/temp/test-nest-app/node_modules/@nestjs/core/helpers/external-context-creator.js:74:28)
at async Object.tests (/Users/nicola/Devel/temp/test-nest-app/node_modules/@nestjs/core/helpers/external-proxy.js:9:24) {type: 'UNAUTHORISED', payload: {…}, errMagic: 'ndskajfasndlfkj435234krjdsa', fromRecipe: 'session', stack: 'Error: Session does not exist. Are you sendin…/@nestjs/core/helpers/external-proxy.js:9:24)', …}
`
nik2208.2208
12/28/2023, 6:43 PMrp_st
12/28/2023, 6:44 PMrp_st
12/28/2023, 6:44 PMrp_st
12/28/2023, 6:45 PMnik2208.2208
12/28/2023, 6:46 PMrp_st
12/28/2023, 6:47 PMrp_st
12/28/2023, 6:47 PMnik2208.2208
12/28/2023, 6:49 PMrp_st
12/28/2023, 6:49 PMrp_st
12/28/2023, 6:49 PMrp_st
12/28/2023, 6:50 PMnik2208.2208
12/28/2023, 6:54 PMbash
Error: Failed to verify access token
at Object.getInfoFromAccessToken (/Users/nicola/Devel/temp/test-nest-app/node_modules/supertokens-node/lib/build/recipe/session/accessToken.js:194:15)
at async Object.getSession (/Users/nicola/Devel/temp/test-nest-app/node_modules/supertokens-node/lib/build/recipe/session/sessionFunctions.js:92:27)
at async Object.getSession (/Users/nicola/Devel/temp/test-nest-app/node_modules/supertokens-node/lib/build/recipe/session/recipeImplementation.js:179:30)
at async Object.getSessionFromRequest (/Users/nicola/Devel/temp/test-nest-app/node_modules/supertokens-node/lib/build/recipe/session/sessionRequestFunctions.js:123:21)
at async TestsResolver.findAll (/Users/nicola/Devel/temp/test-nest-app/src/tests/tests.resolver.ts:26:23)
at async target (/Users/nicola/Devel/temp/test-nest-app/node_modules/@nestjs/core/helpers/external-context-creator.js:74:28)
at async Object.tests (/Users/nicola/Devel/temp/test-nest-app/node_modules/@nestjs/core/helpers/external-proxy.js:9:24) {type: 'TRY_REFRESH_TOKEN', payload: undefined, errMagic: 'ndskajfasndlfkj435234krjdsa', fromRecipe: 'session', stack: 'Error: Failed to verify access token
at O…/@nestjs/core/helpers/external-proxy.js:9:24)', …}
`
rp_st
12/28/2023, 6:54 PMnik2208.2208
12/28/2023, 6:54 PMcatch (err) {
if (Session.Error.isErrorFromSuperTokens(err)) {
throw new GraphQLError('Session related error', {
extensions: {
code: 'UNAUTHENTICATED',
http: { status: err.type === Session.Error.INVALID_CLAIMS ? 403 : 401 },
},
});
}
}
`
rp_st
12/28/2023, 6:55 PMrp_st
12/28/2023, 6:55 PMnik2208.2208
12/28/2023, 7:10 PMnik2208.2208
12/28/2023, 11:29 PMtypescript
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { GqlExecutionContext } from '@nestjs/graphql';
import { Error as STError } from 'supertokens-node';
import { verifySession } from 'supertokens-node/recipe/session/framework/express';
import { VerifySessionOptions } from 'supertokens-node/recipe/session';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private readonly verifyOptions?: VerifySessionOptions) { }
async canActivate(context: ExecutionContext): Promise<boolean> {
const ctx = context.switchToHttp();
if (ctx['contextType'] === 'http') {
// Handle HTTP context
const resp = ctx.getResponse();
let err = undefined;
await verifySession(this.verifyOptions)(
ctx.getRequest(),
resp,
(res) => {
err = res;
},
);
if (resp.headersSent) {
throw new STError({
message: 'RESPONSE_SENT',
type: 'RESPONSE_SENT',
});
}
if (err) {
throw err;
}
return true;
} else if (ctx['contextType'] === 'graphql') {
// Handle GraphQL context
const gqlContext = GqlExecutionContext.create(context);
const { req, res } = gqlContext.getContext();
let err = undefined;
await verifySession(this.verifyOptions)(
req,
res,
(response) => {
err = response;
},
);
if (res.headersSent) {
throw new STError({
message: 'RESPONSE_SENT',
type: 'RESPONSE_SENT',
});
}
if (err) {
throw err;
}
return true;
}
// Handle other types of contexts if needed
return false; // For other context types, guard is not applicable
}
}
nik2208.2208
12/28/2023, 11:30 PMtypescript
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
import { GqlExecutionContext } from '@nestjs/graphql';
export const Session = createParamDecorator(
(data: unknown, ctx: ExecutionContext) => {
let request = null;
if (ctx['contextType'] === 'http') {
request = ctx.switchToHttp().getRequest();
} else if (ctx['contextType'] === 'graphql') {
request = GqlExecutionContext.create(ctx).getContext().req;
}
return request.session;
},
);
nik2208.2208
12/28/2023, 11:33 PMrp_st
12/29/2023, 5:16 AM