{"record":{"id":"f963d96aa1e4e85d","repo":"meteor/meteor","slug":"accounts-ui-config-invalid-option-for-passwordle","errorCode":null,"errorMessage":"Accounts.ui.config: Invalid option for `passwordlessSignupFields`: ${passwordlessSignupFields}","messagePattern":"Accounts\\.ui\\.config: Invalid option for `passwordlessSignupFields`: (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/accounts-ui-unstyled/accounts_ui.js","lineNumber":78,"sourceCode":"  handleRequestPermissions(options);\n  handleRequestOfflineToken(options);\n  handleForceApprovalPrompt(options);\n};\n\nMeteor.startup(function() {\n  const settings = Meteor.settings.public?.packages?.['accounts-ui-unstyled'];\n\n  if (settings) {\n    Accounts.ui.config(settings);\n  }\n});\n\nfunction handlePasswordlessSignupFields(options) {\n  let { passwordlessSignupFields } = options;\n\n  if (passwordlessSignupFields) {\n    const reportInvalid = () => {\n      throw new Error(\n        `Accounts.ui.config: Invalid option for \\`passwordlessSignupFields\\`: ${passwordlessSignupFields}`\n      );\n    };\n\n    if (typeof passwordlessSignupFields === 'string') {\n      passwordlessSignupFields = [passwordlessSignupFields];\n    } else if (!Array.isArray(passwordlessSignupFields)) {\n      reportInvalid();\n    }\n\n    if (passwordlessSignupFields.every(isValidPasswordlessSignupField)) {\n      if (Accounts.ui._options.passwordlessSignupFields) {\n        throw new Error(\n          \"Accounts.ui.config: Can't set `passwordlessSignupFields` more than once\"\n        );\n      }\n      Object.assign(Accounts.ui._options, { passwordlessSignupFields });\n      return;","sourceCodeStart":60,"sourceCodeEnd":96,"githubUrl":"https://github.com/meteor/meteor/blob/5076d2f818d3cac01d0cf8312fa5b2332076a4fb/packages/accounts-ui-unstyled/accounts_ui.js#L60-L96","documentation":"handlePasswordlessSignupFields rejects any passwordlessSignupFields value that is not a string or an array where every element is one of the allowed values (USERNAME_AND_EMAIL, EMAIL_ONLY). A non-string/non-array value, or an array containing an invalid element, triggers reportInvalid().","triggerScenarios":"Passing passwordlessSignupFields as a number, object, or boolean; passing an array containing an unknown string like ['USERNAME_ONLY'] (not valid for passwordless); or passing a malformed value from settings.","commonSituations":"Confusing passwordless field names with password field names (USERNAME_ONLY/USERNAME_AND_OPTIONAL_EMAIL are password-only). Loading config from settings where the field is an object instead of a string. Passing a comma-separated string.","solutions":["Use only 'USERNAME_AND_EMAIL' or 'EMAIL_ONLY' (string or array of those) for passwordlessSignupFields.","If the value comes from settings, coerce/validate it to one of the two allowed strings before calling config."],"exampleFix":"// before\nAccounts.ui.config({ passwordlessSignupFields: 'USERNAME_ONLY' });\n\n// after\nAccounts.ui.config({ passwordlessSignupFields: 'EMAIL_ONLY' });","handlingStrategy":"validation","validationCode":"const VALID = new Set(['USERNAME_AND_EMAIL', 'EMAIL_ONLY']);\nfunction validPasswordlessFields(v) {\n  const arr = Array.isArray(v) ? v : (typeof v === 'string' ? [v] : []);\n  return arr.length > 0 && arr.every(x => VALID.has(x));\n}\nif (options.passwordlessSignupFields && !validPasswordlessFields(options.passwordlessSignupFields)) {\n  delete options.passwordlessSignupFields;\n}","typeGuard":"const isValidPasswordlessField = (f) => VALID.has(f);","tryCatchPattern":null,"preventionTips":["Remember passwordless only allows USERNAME_AND_EMAIL and EMAIL_ONLY — fewer than password mode.","Validate settings-derived config before passing to Accounts.ui.config."],"tags":["accounts-ui","configuration","passwordless","validation"],"backgroundTag":null,"analyzedSha":"5076d2f818d3cac01d0cf8312fa5b2332076a4fb","analyzedAt":"2026-08-13T03:27:40.142Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}