Files

59 lines
1.8 KiB
TypeScript

import { CookieOptions, createSessionStorage } from "@remix-run/node"; // or cloudflare/deno
import { db } from "~/utils/db.server";
function createDatabaseSessionStorage({
cookie
} : { cookie: {name : string} & CookieOptions } ) {
// Configure your database client...
return createSessionStorage({
cookie,
async createData(data, expires) {
var session;
if(data && data.user_id){
session = await db.session.create({data:{data: JSON.stringify({ data }), user:{connect:{id: data.user_id}}}});
}
else {
session = await db.session.create({data:{data: JSON.stringify({ data })}});
}
return session.id;
},
async readData(id) {
let sessiondata = await db.session.findUnique({select: {user_id: true, data: true, user: true},where:{id: id}}) || null;
return sessiondata;
},
async updateData(id, data, expires) {
if(data && data.user_id){
await db.session.upsert({create:{data: JSON.stringify({ data }), user:{connect:{id: data.user_id}}}, update:{data: JSON.stringify({ data }), user:{connect:{id: data.user_id}}}, where: {id: id}});
}
else {
await db.session.upsert({create:{data: JSON.stringify({ data })}, update:{data: JSON.stringify({ data })}, where: {id: id}});
}
},
async deleteData(id) {
await db.session.delete({where: {id: id}});
},
});
}
const { getSession, commitSession, destroySession } =
createDatabaseSessionStorage(
{
// a Cookie from `createCookie` or the CookieOptions to create one
cookie: {
name: "__session",
httpOnly: true,
maxAge: 31556952,
path: "/",
sameSite: "lax",
secrets: ["super_secret_cookie_thingy"],
secure: false,
},
}
);
export { getSession, commitSession, destroySession };