npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

lucia-dynamodb-adapter

v1.0.0

Published

An easy to set up adapter allowing you to use DynamoDB with the 'lucia-auth' library (v3).

Downloads

70

Readme

lucia-dynamodb-adapter

An easy to set up adapter allowing you to use DynamoDB with the 'lucia-auth' library (v3).

Installation

npm install --save lucia-dynamodb-adapter

Features

  • [x] Easy to set up, initialize adapter with some basic config and pass it to the 'lucia-auth' library
  • [x] DynamoDB TTL based session expiration
  • [x] Use your own user table by providing a "getUser" function

Usage

DynamoDB Setup (CDK Example)

Below is a basic example of how to set up a DynamoDB table for storing sessions with a global secondary index for the user id. This is a basic example, you may need to customise it to fit your needs.

You do not need to set this up using CDK, you can also set it up using cloudformation, manually in the AWS console or using any other method you prefer.

const sessionTable = new dynamodb.Table(customResourceStack, `SessionTable`, {
    tableName: 'lucia-sessions',
    partitionKey: { name: "id", type: dynamodb.AttributeType.STRING },
    billingMode: dynamodb.BillingMode.PROVISIONED,
    readCapacity: 1,
    writeCapacity: 1,
    timeToLiveAttribute: "ttl"
})

sessionTable.addGlobalSecondaryIndex({
    indexName: 'lucia-sessions-user-index',
    partitionKey: { name: "userId", type: dynamodb.AttributeType.STRING },
    readCapacity: 1,
    writeCapacity: 1
});

Configuring the adapter

DynamoDBAdapterConfig:

  • client - An instance of DynamoDB client setup with your configuration (Region, credentials, etc.)
  • sessionTableName - The name of the table in dynamodb for storing sessions (Needs to be created with the correct schema)
  • sessionUserIndexName - The name of the index in the session table for the user id
  • getUser - A function that takes a user id, loads the user from your db and returns it as a Lucia user object
import {Lucia, Session, User} from "lucia";
import {DynamoDBClient} from "@aws-sdk/client-dynamodb";
import {DynamoDBAdapter} from "@/lucia/DynamoDBAdapter";
import {getUserFromDb} from "your-user-db";

//Create a new DynamoDB client
const client = new DynamoDBClient();

// Create a function to get a user from your own user table then pass it to the adapter as a Lucia user
async function getUser(userId: string): Promise<User | null> {
    //Get the user from your own user table
    const user = await getUserFromDb(userId);
    
    //If the user does not exist, return null
    if (!user) {
        return null;
    }
    
    //Return the user as a Lucia user. This example assumes that the attributes field has been customised to include a username. See more in this tutorial https://lucia-auth.com/tutorials/username-and-password/
    return {
        id: user.id,
        attributes: {
            username: user.username,
        },
    };
}

//Create a new adapter with the required parameters
const adapter = new DynamoDBAdapter({
    client,
    sessionTableName: "lucia-sessions",
    sessionUserIndexName: "lucia-sessions-user-index",
    getUser: getUser,
});

//Use the adapter with the 'lucia-auth' library as you would with any other adapter

Contributions

If you want to improve the library, please create a pull request.