Skip to content
This repository has been archived by the owner on Dec 12, 2023. It is now read-only.

Add saveUninitialized option #41

Open
wants to merge 8 commits into
base: main
Choose a base branch
from

Conversation

interpretor
Copy link
Contributor

Forces a session that is "uninitialized" to be saved to the store. A session is uninitialized when it is new but not modified. Choosing false is useful for implementing login sessions, reducing server storage usage, or complying with laws that require permission before setting a cookie.

The default is true, as it has been before, so it shouldn't affect the current behavior of the middleware. The option should behave similar to the saveUninitialized option in express-session.

Implementing this has been a bit tricky. The idea was to get a listener to the event.context.session server object, which creates a session when the object has been modified and therefore sends a cookie to the client. I'm not aware of any listener which gets called when every event handler is finished, so I built a proxy for the res.end() method to get a hook to the very end of all event listeners.

The proxy is only in use when setting saveUninitialized = false.

- Move newSessionIfModified logic to dedicated method
- Use deep equal comparison to watch changes of the context session
session = await newSession(event)
} else {
// 1. Create an empty session object in the event context
event.context.session = {}
Copy link
Contributor Author

@interpretor interpretor Dec 5, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This isn't a good idea, it is just a workaround so the rest of the module behaves as before. Initializing an empty session and only saving it when saveUninitialized is true is implemented in #48. I would suggest to merge only #48 instead of this and #47.

@interpretor interpretor mentioned this pull request Dec 5, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant