connect-dynamodb
connect-dynamodb copied to clipboard
feat: Support for nested values in SpecialKey
Description:
This pull request introduces the capability to use SpecialKey for specifying values in nested structures within sessions, enhancing the flexibility of our session management. The primary motivation for this change is to support complex querying scenarios, such as cross-querying session data by user IDs, which are stored in nested objects within session structures.
Key Changes:
-
Nested Structure Support: Previously, accessing nested attributes like userId within a user object in the session data was not possible with SpecialKey. This update enables this functionality, allowing SpecialKey to target nested attributes.
-
Compatibility and Testing:
- The changes maintain backward compatibility and do not alter existing functionalities.
- New tests have been added to ensure that SpecialKey can now handle nested attributes without breaking existing functionalities.
Use Case: Consider a session structured as follows:
{
"sess": {
"cookie": "...",
"user": {
"id": "uid-00001",
"name": "..."
}
}
}
set special keys.
const store = new DynamoDBStore({
client: client,
table: tableName,
specialKeys: [
{
name: "user.id",
type: "S",
},
],
});
dynamodb-client query output
Item: {
id: { S: 'sess:0.45441392681127013' },
userId: { S: 'uid-00001' }, // convert key path to camel case.
expires: { N: '1713351239' },
type: { S: 'connect-session' },
sess: {
S: '{"cookie":{"maxAge":2000},"name":"0.46261875390220175","user":{"id":"uid-00001'"}}'
},
}
With the current system, it is impossible to set userId as a SpecialKey for purposes like querying in DynamoDB's Global Secondary Indexes (GSI) for cross-session user data retrieval. This update addresses such limitations by allowing userId to be specified as a SpecialKey.
Impact: This enhancement will significantly improve our ability to perform more complex queries on session data, facilitating better data management and retrieval based on user-specific or other nested session attributes.
This pull request actually adds this important feature and also corrects an important bug in how it calculates session expiration (line 348-349).
I respectfully urge @ca98am79 to please merge this into master build and release an update to this IMPORTANT library.