UNPKG

payloadcms_otp_plugin

Version:

A comprehensive One-Time Password (OTP) authentication plugin for Payload CMS that enables secure passwordless authentication via SMS and email

47 lines (46 loc) 1.42 kB
import { randomUUID } from "crypto"; export const removeExpiredSessions = (sessions)=>{ const now = new Date(); return sessions.filter(({ expiresAt })=>{ const expiry = expiresAt instanceof Date ? expiresAt : new Date(expiresAt); return expiry > now; }); }; /** * TODO: Remove when Payload exports this function */ export const addUserSession = async ({ collectionConfig, payload, req, user })=>{ let sid; if (collectionConfig.auth.useSessions) { // Add session to user sid = randomUUID(); const now = new Date(); const tokenExpInMs = collectionConfig.auth.tokenExpiration * 1000; const expiresAt = new Date(now.getTime() + tokenExpInMs); const session = { id: sid, createdAt: now, expiresAt }; if (!user.sessions?.length) { user.sessions = [ session ]; } else { user.sessions = removeExpiredSessions(user.sessions); user.sessions.push(session); } await payload.db.updateOne({ id: user.id, collection: collectionConfig.slug, data: user, req, returning: false }); user.collection = collectionConfig.slug; user._strategy = 'local-jwt'; } return { sid }; }; //# sourceMappingURL=session.js.map