@geostrategists/react-router-sessions-dynamodb
v1.3.1
Published
This package provides a session storage implementation for React Router that uses AWS DynamoDB to store session data.
Readme
AWS DynamoDB Session Storage for React Router
This package provides a session storage implementation for React Router that uses AWS DynamoDB to store session data.
Installation
npm install @geostrategists/react-router-sessions-dynamodbPrerequisites
- An AWS account with DynamoDB access
- A DynamoDB table with a primary key (partition key) for storing session IDs
- Important: Time-to-Live (TTL) must be enabled on the DynamoDB table for automatic session expiration
- Configure the TTL attribute in the DynamoDB table settings
Usage
import { createDynamoDBSessionStorage } from "~/lib/sessions";
// Create a session storage instance with environment variables
const sessionStorage = createDynamoDBSessionStorage({
tableName: process.env.DYNAMODB_TABLE_NAME,
cookie: {
// Configure with environment variables
},
});
// Extract session functions
const { getSession, commitSession, destroySession } = sessionStorage;
// Use in a loader
export async function loader({ request }) {
const session = await getSession(request.headers.get("Cookie"));
// Work with session data
const userData = session.get("userData");
// Return data with the session cookie
return json(
{ userData },
{
headers: {
"Set-Cookie": await commitSession(session),
},
},
);
}Configuration Options
DynamoDBSessionStorageOptions
tableName(required): The name of the DynamoDB table to store sessionsidx(required): The name of the attribute used to store the session IDttl(optional): The name of the TTL attributeclient(optional): A pre-configured DynamoDBDocumentClient instancecookie(optional): Cookie configuration optionsname: Cookie namesecrets: Array of secrets for signing the cookiesameSite: SameSite attributepath: Cookie pathmaxAge: Cookie max age in secondshttpOnly: HttpOnly attributesecure: Secure attributedomain: Cookie domain
sessionMaxAge(optional): The max age of table entries when no cookie maxAge is set
[!NOTE] By default, react-router only sets session data to expire when the cookie has a maxAge (or expires date) set. When using session cookies, such an expiry time does not exist, and in theory, such cookies can be kept alive by the browser indefinitely.
However, it can still be desired to let the session data in the table expire at some point in the near or distant future, which can be set with the
sessionMaxAgeproperty.
DynamoDB Table Requirements
- Primary key: Must match the
idxvalue - TTL attribute: Must match the
ttlvalue - Important: TTL must be enabled on the table for automatic session expiration
