Skip to content

vblinden/sour

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sour

Sessions for Deno Fresh with the following stores:

  • PostgreSQL
  • MySQL
  • Redis
  • Cookie
  • Memory

Usage

Create an _middleware.ts file in the root of your project with:

import { MiddlewareHandlerContext } from "$fresh/server.ts";
import { sql } from "./db.ts";

const store = new Postgres(sql);

import { middleware, Postgres } from "https://deno.land/x/sour/mod.ts";

export const handler = [
  (request: Request, context: MiddlewareHandlerContext) =>
    middleware(request, context, {
      store: store,
      // Other options (see SessionOptions.ts)
    }),
];

After this you can add access and modify the session in your handlers, like:

import { WithSession } from "https://deno.land/x/sour/types.ts";

export const hander: Handlers<Data, WithSession> = {
  GET(_request, context) {
    const { session } = context.state;

    // Get a value...
    session.get("user_id");

    // Set a value...
    session.set("user_id", 973891); 

    // Check if session has value...
    session.has("user_id");

    // Flash a value to the session, which will get deleted when it is accessed...
    session.flash("error", "Username is required");

    // Will delete the session...
    session.delete();

    return context.render!();
  },
};

Memory

This is the most simple store, sessions are gone after you restart the application.

const store = new Memory();

PostgreSQL

This store uses the postgresjs library to execute its queries.

import { sql } from "./db.ts";
const store = new Postgres(sql);

Don't forget too apply the following query to your database:

create table if not exists sessions (id varchar not
null primary key, data varchar)

Redis

TODO

MySQL

TODO

Cookie

Use the middlewareCookie instead of middleware.

Credit

Lots of inspiration taken from Oak Sessions & fresh-session.