Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
77 lines
2.1 KiB
Plaintext
77 lines
2.1 KiB
Plaintext
import { ValidationError } from '../../../errors/index.js';
|
|
import { getLoginOptions } from '../../getLoginOptions.js';
|
|
import { generatePasswordSaltHash } from './generatePasswordSaltHash.js';
|
|
export const registerLocalStrategy = async ({ collection, doc, password, payload, req })=>{
|
|
const loginWithUsername = collection?.auth?.loginWithUsername;
|
|
const { canLoginWithEmail, canLoginWithUsername } = getLoginOptions(loginWithUsername);
|
|
let whereConstraint;
|
|
if (!canLoginWithUsername) {
|
|
whereConstraint = {
|
|
email: {
|
|
equals: doc.email
|
|
}
|
|
};
|
|
} else {
|
|
whereConstraint = {
|
|
or: []
|
|
};
|
|
if (canLoginWithEmail && doc.email) {
|
|
whereConstraint.or?.push({
|
|
email: {
|
|
equals: doc.email
|
|
}
|
|
});
|
|
}
|
|
if (doc.username) {
|
|
whereConstraint.or?.push({
|
|
username: {
|
|
equals: doc.username
|
|
}
|
|
});
|
|
}
|
|
}
|
|
const existingUser = await payload.find({
|
|
collection: collection.slug,
|
|
depth: 0,
|
|
limit: 1,
|
|
pagination: false,
|
|
req,
|
|
where: whereConstraint
|
|
});
|
|
if (existingUser.docs.length > 0) {
|
|
throw new ValidationError({
|
|
collection: collection.slug,
|
|
errors: [
|
|
canLoginWithUsername ? {
|
|
message: req.t('error:usernameAlreadyRegistered'),
|
|
path: 'username'
|
|
} : {
|
|
message: req.t('error:userEmailAlreadyRegistered'),
|
|
path: 'email'
|
|
}
|
|
]
|
|
});
|
|
}
|
|
const { hash, salt } = await generatePasswordSaltHash({
|
|
collection,
|
|
password,
|
|
req
|
|
});
|
|
const sanitizedDoc = {
|
|
...doc
|
|
};
|
|
if (sanitizedDoc.password) {
|
|
delete sanitizedDoc.password;
|
|
}
|
|
return payload.db.create({
|
|
collection: collection.slug,
|
|
data: {
|
|
...sanitizedDoc,
|
|
hash,
|
|
salt
|
|
},
|
|
req
|
|
});
|
|
};
|
|
|
|
//# sourceMappingURL=register.js.map |