Overriding session middleware fails
andreespirela opened this issue · comments
andreespirela commented
Overriding session middleware fails.
Minimal reproduction:
import { MandarineCore, Mandarine, Override, MandarineSecurity, Controller, GET } from "https://deno.land/x/mandarinets@v2.1.1/mod.ts";
import { MandarineSessionContainer } from "https://deno.land/x/mandarinets@v2.1.1/main-core/mandarine-native/sessions/mandarineSessionContainer.ts";
@Override()
class WebMvcConfigurer extends Mandarine.Native.WebMvcConfigurer {
getSessionContainer(): MandarineSessionContainer {
return new MandarineSessionContainer();
}
}
@Controller()
class Test {
@GET("/hello")
hello() {
return "Hello, world!";
}
}
new MandarineCore().MVC().run();
Stacktrace:
TypeError: Cannot use 'in' operator to search for '0' in undefined
at new KeyStack (keyStack.ts:33:12)
at Function.getCookieForSession (sessions.util.ts:35:31)
at SessionMiddleware.createSessionCookie (sessionMiddleware.ts:83:78)
at MandarineMvcFrameworkStarter.preRequestInternalMiddlewares (mandarineMvcFrameworkStarter.ts:80:44)
at responseHandler (mandarineMvcFrameworkStarter.ts:156:18)
at dispatch (middleware.ts:41:13)
at router.ts:866:20
at dispatch (middleware.ts:41:13)
at composedMiddleware (middleware.ts:44:12)
at dispatch (router.ts:872:28)
andreespirela commented
The reason why this is happening is because changeSessionContainer
called in the proxy is not setting the keys
property. It is set when Mandarine is initialized but after that it is ignored.