From 7bbefe7a6982c3346b941308e7bf82c4bbdb5180 Mon Sep 17 00:00:00 2001 From: adrien2p Date: Fri, 4 Nov 2022 17:23:27 +0100 Subject: [PATCH] fix: add support for logout --- package.json | 2 +- packages/medusa-plugin-auth/src/api/index.ts | 42 +++++++++++++++++++- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index c4eec95..57a0098 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ ] }, "scripts": { - "build": "./node_modules/.bin/lerna run build", + "build": "./node_modules/.bin/lerna run --parallel build", "bootstrap": "./node_modules/.bin/lerna bootstrap", "clean": "./node_modules/.bin/lerna run --parallel clean", "release": "./node_modules/.bin/lerna publish", diff --git a/packages/medusa-plugin-auth/src/api/index.ts b/packages/medusa-plugin-auth/src/api/index.ts index edc66e4..6c530ae 100644 --- a/packages/medusa-plugin-auth/src/api/index.ts +++ b/packages/medusa-plugin-auth/src/api/index.ts @@ -1,10 +1,12 @@ import { Router } from 'express'; import { ConfigModule } from '@medusajs/medusa/dist/types/global'; +import wrapHandler from '@medusajs/medusa/dist/api/middlewares/await-middleware'; import loadConfig from '@medusajs/medusa/dist/loaders/config'; -import { AuthOptions } from '../types'; +import { AUTH_TOKEN_COOKIE_NAME, AuthOptions } from '../types'; import { loadJwtOverrideStrategy } from '../auth-strategies/jwt-override'; import { getGoogleAdminAuthRouter, getGoogleStoreAuthRouter } from '../auth-strategies/google'; +import cors from "cors"; export default function (rootDirectory, pluginOptions: AuthOptions): Router[] { const configModule = loadConfig(rootDirectory) as ConfigModule; @@ -30,5 +32,41 @@ function loadRouters(configModule: ConfigModule, options: AuthOptions): Router[] } } - return routers; + + return [...routers, getLogoutRouter(configModule)]; } + +function getLogoutRouter(configModule: ConfigModule): Router { + const router = Router() + + const logoutHandler = async (req, res) => { + try { + req.session.destroy() + } catch (e) { + } + + req.session.jwt = {} + + res.clearCookie(AUTH_TOKEN_COOKIE_NAME); + + res.status(200).json({}) + } + + const adminCorsOptions = { + origin: configModule.projectConfig.admin_cors.split(','), + credentials: true, + }; + + router.use("/admin/auth", cors(adminCorsOptions)) + router.delete("/admin/auth", wrapHandler(logoutHandler)) + + const storeCorsOptions = { + origin: configModule.projectConfig.store_cors.split(','), + credentials: true, + }; + + router.use("/store/auth", cors(storeCorsOptions)) + router.delete("/store/auth", wrapHandler(logoutHandler)) + + return router; +} \ No newline at end of file