diff --git a/backend/src/application.ts b/backend/src/application.ts index c0b1678..bd62260 100644 --- a/backend/src/application.ts +++ b/backend/src/application.ts @@ -9,10 +9,9 @@ import { TokenServiceBindings, UserServiceBindings } from '@loopback/authentication-jwt'; -import { AuthService, SzakdolgozatUserService } from './services'; +import { SzakdolgozatUserService } from './services'; import { GraphQLBindings, GraphQLServer } from '@loopback/graphql'; import { UserResolver } from './graphql-resolvers/user-resolver'; -import { SzakdolgozatBindings } from './bindings'; import { SzakdolgozatAuthChecker } from './szakdolgozat-auth-checker'; export { ApplicationConfig }; @@ -38,10 +37,9 @@ export class SzakdolgozatBackendApplication extends BootMixin( this.get(TokenServiceBindings.TOKEN_SERVICE).then(tokenService => { this.bind(AuthenticationBindings.STRATEGY).to(new JWTAuthenticationStrategy(tokenService)); }); - this.bind(GraphQLBindings.GRAPHQL_AUTH_CHECKER).toProvider(SzakdolgozatAuthChecker); + this.bind(GraphQLBindings.GRAPHQL_AUTH_CHECKER).toDynamicValue(SzakdolgozatAuthChecker); this.service(SzakdolgozatUserService, UserServiceBindings.USER_SERVICE); - this.service(AuthService, SzakdolgozatBindings.AUTH_SERVICE); this.projectRoot = __dirname; this.bootOptions = { diff --git a/backend/src/bindings.ts b/backend/src/bindings.ts index ff9af01..1944520 100644 --- a/backend/src/bindings.ts +++ b/backend/src/bindings.ts @@ -1,7 +1,5 @@ import { BindingKey } from '@loopback/core'; -import { AuthService } from './services'; export namespace SzakdolgozatBindings { - export const AUTH_SERVICE = BindingKey.create('szakdolgozat.auth'); export const AUTH_TOKEN = BindingKey.create('szakdolgozat.auth_token'); } diff --git a/backend/src/graphql-resolvers/user-resolver.ts b/backend/src/graphql-resolvers/user-resolver.ts index dbbd167..9d77a3e 100644 --- a/backend/src/graphql-resolvers/user-resolver.ts +++ b/backend/src/graphql-resolvers/user-resolver.ts @@ -57,11 +57,13 @@ export class UserResolver { @authorized() @mutation(returns => Boolean) - async logout(@inject(SzakdolgozatBindings.AUTH_TOKEN) token: string): Promise { - console.log('Logout service: ', token); - console.log('Context: ', this.context?.name); - //console.log('token:', this.authService.receivedToken); //TODO - //await this.jwtService.revokeToken?.(this.authService.receivedToken); + async logout(): Promise { + const token = await this.context.get(SzakdolgozatBindings.AUTH_TOKEN); + if (this.jwtService.revokeToken) { + await this.jwtService.revokeToken(token); + } else { + console.error('Cannot revoke token'); + } return true; } diff --git a/backend/src/services/auth.service.ts b/backend/src/services/auth.service.ts deleted file mode 100644 index 2bd99fb..0000000 --- a/backend/src/services/auth.service.ts +++ /dev/null @@ -1,7 +0,0 @@ -export class AuthService { - receivedToken: string; - - constructor() { - console.log('new auth service'); - } -} diff --git a/backend/src/services/index.ts b/backend/src/services/index.ts index d99a6a5..e17ee5c 100644 --- a/backend/src/services/index.ts +++ b/backend/src/services/index.ts @@ -1,2 +1 @@ export * from './user.service'; -export * from './auth.service'; diff --git a/backend/src/szakdolgozat-auth-checker.ts b/backend/src/szakdolgozat-auth-checker.ts index cdf642b..3276df4 100644 --- a/backend/src/szakdolgozat-auth-checker.ts +++ b/backend/src/szakdolgozat-auth-checker.ts @@ -1,32 +1,25 @@ import { AuthenticateFn, AuthenticationBindings, AuthenticationStrategy } from '@loopback/authentication'; -import { AuthChecker, ExpressContext, ResolverData } from '@loopback/graphql'; -import { Context, Getter, inject, Provider, ValueOrPromise } from '@loopback/core'; +import { AuthChecker, ExpressContext } from '@loopback/graphql'; +import { Context, Getter, inject, ValueOrPromise } from '@loopback/core'; import { JWTAuthenticationStrategy } from '@loopback/authentication-jwt'; import { SzakdolgozatBindings } from './bindings'; -import { AuthService } from './services'; -export class SzakdolgozatAuthChecker implements Provider { - constructor(@inject(AuthenticationBindings.AUTH_ACTION) private authenticate: AuthenticateFn, - @inject.getter(AuthenticationBindings.STRATEGY) - readonly getStrategies: Getter, - @inject(SzakdolgozatBindings.AUTH_SERVICE) private authService: AuthService, - @inject.context() private context: Context) { - console.log('new auth checker'); +export class SzakdolgozatAuthChecker { + constructor() { + console.log('New auth checker'); } - value(): ValueOrPromise { - return this.authUser.bind(this); - } - - async authUser(resolverData: ResolverData, roles: string[]) { - const context = ( resolverData.context); - const res = await this.authenticate(context.req); - const strat = await this.getStrategies(); - // Itt már biztosan van érvényes token - console.log('Context: ', this.context.name); - this.context.bind(SzakdolgozatBindings.AUTH_TOKEN).to(strat.extractCredentials(context.req)); - console.log('This: ', this.authService); - console.log('Res: ', ( res).id); - return true; + static value(@inject(AuthenticationBindings.AUTH_ACTION) authenticate: AuthenticateFn, + @inject.getter(AuthenticationBindings.STRATEGY) + getStrategies: Getter, + @inject.context() context: Context): ValueOrPromise { + return async (resolverData, roles) => { + const econtext = ( resolverData.context); + const res = await authenticate(econtext.req); + const strat = await getStrategies(); + // Itt már biztosan van érvényes token + context.bind(SzakdolgozatBindings.AUTH_TOKEN).to(strat.extractCredentials(econtext.req)); + return true; + }; } }