UNPKG

payload

Version:

Node, React, Headless CMS and Application Framework built on Next.js

50 lines (49 loc) 1.8 kB
import { status as httpStatus } from 'http-status'; import { APIError } from '../../errors/index.js'; export const logoutOperation = async (incomingArgs)=>{ let args = incomingArgs; const { allSessions, collection: { config: collectionConfig }, req: { user }, req } = incomingArgs; if (!user) { throw new APIError('No User', httpStatus.BAD_REQUEST); } if (user.collection !== collectionConfig.slug) { throw new APIError('Incorrect collection', httpStatus.FORBIDDEN); } if (collectionConfig.hooks?.afterLogout?.length) { for (const hook of collectionConfig.hooks.afterLogout){ args = await hook({ collection: args.collection?.config, context: req.context, req }) || args; } } if (collectionConfig.auth.disableLocalStrategy !== true && collectionConfig.auth.useSessions) { const userWithSessions = await req.payload.db.findOne({ collection: collectionConfig.slug, req, where: { id: { equals: user.id } } }); if (!userWithSessions) { throw new APIError('No User', httpStatus.BAD_REQUEST); } if (allSessions) { userWithSessions.sessions = []; } else { const sessionsAfterLogout = (userWithSessions?.sessions || []).filter((s)=>s.id !== req?.user?._sid); userWithSessions.sessions = sessionsAfterLogout; } await req.payload.db.updateOne({ id: user.id, collection: collectionConfig.slug, data: userWithSessions, returning: false }); } return true; }; //# sourceMappingURL=logout.js.map