payload
Version:
Node, React, Headless CMS and Application Framework built on Next.js
50 lines (49 loc) • 1.8 kB
JavaScript
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