[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-meteor-meteor-accounts":3,"mdc--350nll-key":39,"related-org-meteor-meteor-accounts":3168,"related-repo-meteor-meteor-accounts":3329},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":34,"sourceUrl":37,"mdContent":38},"meteor-accounts","implement authentication in Meteor apps","Use when wiring up authentication in a Meteor 3 app. Triggers on accounts-password, accounts-base, OAuth (Google, Facebook, GitHub, Apple, Twitter, Meetup, Weibo), accounts-2fa, accounts-passwordless, ServiceConfiguration.configurations.upsertAsync, Accounts.createUserAsync, Accounts.setPasswordAsync, Accounts.forgotPassword, Accounts.resetPassword, Accounts.verifyEmail, useHttpOnlyCookies, clientStorage, Meteor.loginWithPasswordAnd2faCode, email verification. Use this skill when the user asks about signups, signins, or asks about token storage vs HttpOnly cookies.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"meteor","Meteor","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmeteor.png",[12,16,17,20],{"name":13,"slug":14,"type":15},"Auth","auth","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Authentication","authentication",{"name":21,"slug":22,"type":15},"OAuth","oauth",4,"https:\u002F\u002Fgithub.com\u002Fmeteor\u002Fagent-skills","2026-08-28T15:08:40.058032","MIT",0,[29,30,31,32,8,33],"agent-skills","ai-agents","claude-code","codex","meteorjs",{"repoUrl":24,"stars":23,"forks":27,"topics":35,"description":36},[29,30,31,32,8,33],"Meteor-maintained Agent Skills for building, migrating, testing, securing, and deploying Meteor 3 applications.","https:\u002F\u002Fgithub.com\u002Fmeteor\u002Fagent-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fmeteor-accounts","---\nname: meteor-accounts\ndescription: >\n  Use when wiring up authentication in a Meteor 3 app. Triggers on\n  accounts-password, accounts-base, OAuth (Google, Facebook, GitHub, Apple,\n  Twitter, Meetup, Weibo), accounts-2fa, accounts-passwordless,\n  ServiceConfiguration.configurations.upsertAsync, Accounts.createUserAsync,\n  Accounts.setPasswordAsync, Accounts.forgotPassword, Accounts.resetPassword,\n  Accounts.verifyEmail, useHttpOnlyCookies, clientStorage,\n  Meteor.loginWithPasswordAnd2faCode, email verification. Use this skill\n  when the user asks about signups, signins, or asks about token storage\n  vs HttpOnly cookies.\nmetadata:\n  author: meteor\n  kind: knowledge\n  meteor: \">=3.0\"\n  area: auth\n  tagline: \"Wire up authentication in Meteor 3 (accounts-password, OAuth providers, 2FA, passwordless, email verification).\"\n  bundle: [\"fullstack\"]\n  docs_synced_at: \"2026-08-25\"\nlicense: MIT\n---\n\n# Meteor accounts\n\n`accounts-base` plus a flavor package (`accounts-password`,\n`accounts-google`, etc.). Meteor stores users in `Meteor.users` and ships\nthe client a resume token mapped to that document.\n\n## Decision flow\n\n1. Username + password? Add `accounts-password`.\n2. Social login? Add `accounts-base` plus the provider package (e.g.\n   `accounts-google`) and configure the service.\n3. Magic-link? Add `accounts-passwordless`.\n4. 2FA? Layer `accounts-2fa` on top of `accounts-password`.\n5. Token storage on the client? Default is Web Storage. Meteor 3.3+\n   supports an HttpOnly cookie flow; see the section below.\n\n## Username + password\n\n```javascript\n\u002F\u002F server\u002Faccounts.js\nimport { Accounts } from \"meteor\u002Faccounts-base\";\nimport { Meteor } from \"meteor\u002Fmeteor\";\n\nMeteor.startup(() => {\n  Accounts.config({\n    sendVerificationEmail: true,\n  });\n\n  Accounts.emailTemplates.siteName = \"My App\";\n  Accounts.emailTemplates.from = \"no-reply@example.com\";\n});\n```\n\nThe `from` address is required; Meteor 3.5+ logs a server warning if you\nomit it.\n\nDo not set `forbidClientAccountCreation: true` when the client signup form\ncalls `Accounts.createUser` or `Accounts.createUserAsync`. The server rejects\nthat request with `403 Signups forbidden`. For invite-only or administrator\nprovisioning, set the option on both client and server, remove the public\nsignup UI, and call `Accounts.createUserAsync` only from trusted server code\nafter its own authorization check.\n\n```javascript\n\u002F\u002F client\u002Fsignin.js (Meteor 3.5+)\nimport { Meteor } from \"meteor\u002Fmeteor\";\nimport { Accounts } from \"meteor\u002Faccounts-base\";\n\nasync function signUp({ email, password }) {\n  await Accounts.createUserAsync({ email, password });\n}\n\nasync function signIn({ email, password }) {\n  await Meteor.loginWithPasswordAsync(email, password);\n}\n```\n\nClient `Accounts.createUser(options, callback)` also remains supported.\n`Meteor.loginWithPasswordAsync` was added in Meteor 3.5; on older 3.x use\nthe callback form of `Meteor.loginWithPassword` or wrap it in a Promise.\n\nOn the server use `await Accounts.createUserAsync(options)` and\n`await Accounts.setPasswordAsync(userId, newPassword)`.\n\n## HttpOnly cookies (Meteor 3.3+)\n\nDefault token storage is Web Storage. To move the resume token into an\nHttpOnly cookie and keep the client tab in-memory only:\n\n```javascript\n\u002F\u002F server\nMeteor.startup(() => {\n  Accounts.config({\n    clientStorage: \"none\",\n    useHttpOnlyCookies: true,\n  });\n});\n```\n\n```json\n\u002F\u002F settings.json (public; surfaces the same flags to the client)\n{\n  \"public\": {\n    \"packages\": {\n      \"accounts\": {\n        \"clientStorage\": \"none\",\n        \"useHttpOnlyCookies\": true\n      }\n    }\n  }\n}\n```\n\nAfter restart and login, `Meteor.loginToken*` no longer appears in\n`localStorage`; the browser receives an HttpOnly `meteor_login_token`\ncookie. Each tab keeps its own in-memory credentials.\n\n## OAuth (Google example)\n\n```javascript\n\u002F\u002F server\u002Foauth.js\nimport { ServiceConfiguration } from \"meteor\u002Fservice-configuration\";\n\nawait ServiceConfiguration.configurations.upsertAsync(\n  { service: \"google\" },\n  {\n    $set: {\n      clientId: process.env.GOOGLE_CLIENT_ID,\n      secret: process.env.GOOGLE_CLIENT_SECRET,\n      loginStyle: \"popup\",\n    },\n  },\n);\n```\n\n```javascript\n\u002F\u002F client\nMeteor.loginWithGoogle(\n  { requestPermissions: [\"email\", \"profile\"] },\n  (err) => { if (err) console.error(err); },\n);\n```\n\n`loginStyle: \"redirect\"` for mobile or environments without\n`window.close` \u002F `window.opener`. Each provider ships its own\n`accounts-\u003Cservice>` package: `accounts-google`, `accounts-github`,\n`accounts-facebook`, `accounts-twitter`, `accounts-apple`,\n`accounts-meetup`, `accounts-weibo`.\n\nTo encrypt OAuth secrets at rest, add `oauth-encryption` and pass\n`oauthSecretKey` to `Accounts.config`. This seals the provider application\nsecret in `ServiceConfiguration.configurations.secret` and the supported\nprovider-specific user token fields. It does not create a generic\n`Meteor.users.services.\u003Cprovider>.secret` field. See `meteor-security`.\n\n## Email verification and reset\n\n```javascript\n\u002F\u002F client\nAccounts.forgotPassword({ email }, (err) => { ... });\n\n\u002F\u002F reset page\nAccounts.resetPassword(token, newPassword, (err) => { ... });\n\n\u002F\u002F verify email\nAccounts.verifyEmail(token, (err) => { ... });\n```\n\nCustomize the URL pattern that lands in the email:\n\n```javascript\nAccounts.urls.resetPassword = (token) =>\n  Meteor.absoluteUrl(`reset\u002F${token}`);\nAccounts.urls.verifyEmail = (token) =>\n  Meteor.absoluteUrl(`verify\u002F${token}`);\n```\n\nBoth setters accept async functions too (Meteor 3.x).\n\nCustomize the message:\n\n```javascript\nAccounts.emailTemplates.resetPassword.subject = () => \"Reset your password\";\nAccounts.emailTemplates.resetPassword.text = (user, url) =>\n  `Reset link: ${url}`;\n```\n\n## Passwordless\n\nAdd `accounts-passwordless`. Request a one-time code or link, then submit the\ncode with the same selector:\n\n```javascript\nAccounts.requestLoginTokenForUser(\n  {\n    selector: { email },\n    userData: { email },\n    options: { userCreationDisabled: false },\n  },\n  (error) => { if (error) console.error(error); },\n);\n\nMeteor.passwordlessLoginWithToken(\n  { email },\n  token,\n  (error) => { if (error) console.error(error); },\n);\n```\n\nSet `userCreationDisabled: true` for sign-in-only flows. Configure\n`tokenSequenceLength`, `loginTokenExpirationHours`, and the\n`Accounts.emailTemplates.sendLoginToken` template on the server. Treat the\ntoken-request method as an abuse-sensitive endpoint and rate-limit repeated\nrequests.\n\n## 2FA\n\n`accounts-2fa` adds TOTP. The login flow:\n\n1. Client calls `Meteor.loginWithPasswordAsync(user, password)` on Meteor\n   3.5+, or the callback form of `Meteor.loginWithPassword` on older 3.x.\n2. Server rejects with `error.error === 'no-2fa-code'`.\n3. Client prompts for a code, retries with\n   `Meteor.loginWithPasswordAnd2faCode(user, password, code, cb)`.\n\n## Anti-patterns\n\n- Store the OAuth secret in `Meteor.settings.public`. The client sees\n  `public`. Put secrets at the top level of `settings.json`.\n- Build a custom password hash. `accounts-password` uses bcrypt; trust it.\n- Bypass `forbidClientAccountCreation` with a method that takes a\n  password. Same risk.\n- Run `Accounts.config({ ... })` inside a deferred path. Call it at top\n  level or in `Meteor.startup`.\n\n## See also\n\n- `references\u002Fpassword-flows.md`\n- `references\u002Foauth-services.md`\n- `references\u002Feval-cases.md`\n- For OAuth-secret encryption and CSP, see the `meteor-security` skill.\n",{"data":40,"body":48},{"name":4,"description":6,"metadata":41,"license":26},{"author":8,"kind":42,"meteor":43,"area":14,"tagline":44,"bundle":45,"docs_synced_at":47},"knowledge",">=3.0","Wire up authentication in Meteor 3 (accounts-password, OAuth providers, 2FA, passwordless, email verification).",[46],"fullstack","2026-08-25",{"type":49,"children":50},"root",[51,59,96,103,175,181,536,548,592,901,930,950,956,961,1109,1303,1332,1338,1628,1813,1897,1949,1955,2201,2206,2403,2408,2413,2573,2579,2591,2933,2969,2975,2985,3032,3038,3114,3120,3162],{"type":52,"tag":53,"props":54,"children":55},"element","h1",{"id":4},[56],{"type":57,"value":58},"text","Meteor accounts",{"type":52,"tag":60,"props":61,"children":62},"p",{},[63,70,72,78,80,86,88,94],{"type":52,"tag":64,"props":65,"children":67},"code",{"className":66},[],[68],{"type":57,"value":69},"accounts-base",{"type":57,"value":71}," plus a flavor package (",{"type":52,"tag":64,"props":73,"children":75},{"className":74},[],[76],{"type":57,"value":77},"accounts-password",{"type":57,"value":79},",\n",{"type":52,"tag":64,"props":81,"children":83},{"className":82},[],[84],{"type":57,"value":85},"accounts-google",{"type":57,"value":87},", etc.). Meteor stores users in ",{"type":52,"tag":64,"props":89,"children":91},{"className":90},[],[92],{"type":57,"value":93},"Meteor.users",{"type":57,"value":95}," and ships\nthe client a resume token mapped to that document.",{"type":52,"tag":97,"props":98,"children":100},"h2",{"id":99},"decision-flow",[101],{"type":57,"value":102},"Decision flow",{"type":52,"tag":104,"props":105,"children":106},"ol",{},[107,120,139,151,170],{"type":52,"tag":108,"props":109,"children":110},"li",{},[111,113,118],{"type":57,"value":112},"Username + password? Add ",{"type":52,"tag":64,"props":114,"children":116},{"className":115},[],[117],{"type":57,"value":77},{"type":57,"value":119},".",{"type":52,"tag":108,"props":121,"children":122},{},[123,125,130,132,137],{"type":57,"value":124},"Social login? Add ",{"type":52,"tag":64,"props":126,"children":128},{"className":127},[],[129],{"type":57,"value":69},{"type":57,"value":131}," plus the provider package (e.g.\n",{"type":52,"tag":64,"props":133,"children":135},{"className":134},[],[136],{"type":57,"value":85},{"type":57,"value":138},") and configure the service.",{"type":52,"tag":108,"props":140,"children":141},{},[142,144,150],{"type":57,"value":143},"Magic-link? Add ",{"type":52,"tag":64,"props":145,"children":147},{"className":146},[],[148],{"type":57,"value":149},"accounts-passwordless",{"type":57,"value":119},{"type":52,"tag":108,"props":152,"children":153},{},[154,156,162,164,169],{"type":57,"value":155},"2FA? Layer ",{"type":52,"tag":64,"props":157,"children":159},{"className":158},[],[160],{"type":57,"value":161},"accounts-2fa",{"type":57,"value":163}," on top of ",{"type":52,"tag":64,"props":165,"children":167},{"className":166},[],[168],{"type":57,"value":77},{"type":57,"value":119},{"type":52,"tag":108,"props":171,"children":172},{},[173],{"type":57,"value":174},"Token storage on the client? Default is Web Storage. Meteor 3.3+\nsupports an HttpOnly cookie flow; see the section below.",{"type":52,"tag":97,"props":176,"children":178},{"id":177},"username-password",[179],{"type":57,"value":180},"Username + password",{"type":52,"tag":182,"props":183,"children":188},"pre",{"className":184,"code":185,"language":186,"meta":187,"style":187},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F server\u002Faccounts.js\nimport { Accounts } from \"meteor\u002Faccounts-base\";\nimport { Meteor } from \"meteor\u002Fmeteor\";\n\nMeteor.startup(() => {\n  Accounts.config({\n    sendVerificationEmail: true,\n  });\n\n  Accounts.emailTemplates.siteName = \"My App\";\n  Accounts.emailTemplates.from = \"no-reply@example.com\";\n});\n","javascript","",[189],{"type":52,"tag":64,"props":190,"children":191},{"__ignoreMap":187},[192,204,257,299,308,347,375,399,417,425,473,519],{"type":52,"tag":193,"props":194,"children":197},"span",{"class":195,"line":196},"line",1,[198],{"type":52,"tag":193,"props":199,"children":201},{"style":200},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[202],{"type":57,"value":203},"\u002F\u002F server\u002Faccounts.js\n",{"type":52,"tag":193,"props":205,"children":207},{"class":195,"line":206},2,[208,214,220,226,231,236,241,247,252],{"type":52,"tag":193,"props":209,"children":211},{"style":210},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[212],{"type":57,"value":213},"import",{"type":52,"tag":193,"props":215,"children":217},{"style":216},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[218],{"type":57,"value":219}," {",{"type":52,"tag":193,"props":221,"children":223},{"style":222},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[224],{"type":57,"value":225}," Accounts",{"type":52,"tag":193,"props":227,"children":228},{"style":216},[229],{"type":57,"value":230}," }",{"type":52,"tag":193,"props":232,"children":233},{"style":210},[234],{"type":57,"value":235}," from",{"type":52,"tag":193,"props":237,"children":238},{"style":216},[239],{"type":57,"value":240}," \"",{"type":52,"tag":193,"props":242,"children":244},{"style":243},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[245],{"type":57,"value":246},"meteor\u002Faccounts-base",{"type":52,"tag":193,"props":248,"children":249},{"style":216},[250],{"type":57,"value":251},"\"",{"type":52,"tag":193,"props":253,"children":254},{"style":216},[255],{"type":57,"value":256},";\n",{"type":52,"tag":193,"props":258,"children":260},{"class":195,"line":259},3,[261,265,269,274,278,282,286,291,295],{"type":52,"tag":193,"props":262,"children":263},{"style":210},[264],{"type":57,"value":213},{"type":52,"tag":193,"props":266,"children":267},{"style":216},[268],{"type":57,"value":219},{"type":52,"tag":193,"props":270,"children":271},{"style":222},[272],{"type":57,"value":273}," Meteor",{"type":52,"tag":193,"props":275,"children":276},{"style":216},[277],{"type":57,"value":230},{"type":52,"tag":193,"props":279,"children":280},{"style":210},[281],{"type":57,"value":235},{"type":52,"tag":193,"props":283,"children":284},{"style":216},[285],{"type":57,"value":240},{"type":52,"tag":193,"props":287,"children":288},{"style":243},[289],{"type":57,"value":290},"meteor\u002Fmeteor",{"type":52,"tag":193,"props":292,"children":293},{"style":216},[294],{"type":57,"value":251},{"type":52,"tag":193,"props":296,"children":297},{"style":216},[298],{"type":57,"value":256},{"type":52,"tag":193,"props":300,"children":301},{"class":195,"line":23},[302],{"type":52,"tag":193,"props":303,"children":305},{"emptyLinePlaceholder":304},true,[306],{"type":57,"value":307},"\n",{"type":52,"tag":193,"props":309,"children":311},{"class":195,"line":310},5,[312,316,320,326,331,336,342],{"type":52,"tag":193,"props":313,"children":314},{"style":222},[315],{"type":57,"value":9},{"type":52,"tag":193,"props":317,"children":318},{"style":216},[319],{"type":57,"value":119},{"type":52,"tag":193,"props":321,"children":323},{"style":322},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[324],{"type":57,"value":325},"startup",{"type":52,"tag":193,"props":327,"children":328},{"style":222},[329],{"type":57,"value":330},"(",{"type":52,"tag":193,"props":332,"children":333},{"style":216},[334],{"type":57,"value":335},"()",{"type":52,"tag":193,"props":337,"children":339},{"style":338},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[340],{"type":57,"value":341}," =>",{"type":52,"tag":193,"props":343,"children":344},{"style":216},[345],{"type":57,"value":346}," {\n",{"type":52,"tag":193,"props":348,"children":350},{"class":195,"line":349},6,[351,356,360,365,370],{"type":52,"tag":193,"props":352,"children":353},{"style":222},[354],{"type":57,"value":355},"  Accounts",{"type":52,"tag":193,"props":357,"children":358},{"style":216},[359],{"type":57,"value":119},{"type":52,"tag":193,"props":361,"children":362},{"style":322},[363],{"type":57,"value":364},"config",{"type":52,"tag":193,"props":366,"children":368},{"style":367},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[369],{"type":57,"value":330},{"type":52,"tag":193,"props":371,"children":372},{"style":216},[373],{"type":57,"value":374},"{\n",{"type":52,"tag":193,"props":376,"children":378},{"class":195,"line":377},7,[379,384,389,395],{"type":52,"tag":193,"props":380,"children":381},{"style":367},[382],{"type":57,"value":383},"    sendVerificationEmail",{"type":52,"tag":193,"props":385,"children":386},{"style":216},[387],{"type":57,"value":388},":",{"type":52,"tag":193,"props":390,"children":392},{"style":391},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[393],{"type":57,"value":394}," true",{"type":52,"tag":193,"props":396,"children":397},{"style":216},[398],{"type":57,"value":79},{"type":52,"tag":193,"props":400,"children":402},{"class":195,"line":401},8,[403,408,413],{"type":52,"tag":193,"props":404,"children":405},{"style":216},[406],{"type":57,"value":407},"  }",{"type":52,"tag":193,"props":409,"children":410},{"style":367},[411],{"type":57,"value":412},")",{"type":52,"tag":193,"props":414,"children":415},{"style":216},[416],{"type":57,"value":256},{"type":52,"tag":193,"props":418,"children":420},{"class":195,"line":419},9,[421],{"type":52,"tag":193,"props":422,"children":423},{"emptyLinePlaceholder":304},[424],{"type":57,"value":307},{"type":52,"tag":193,"props":426,"children":428},{"class":195,"line":427},10,[429,433,437,442,446,451,456,460,465,469],{"type":52,"tag":193,"props":430,"children":431},{"style":222},[432],{"type":57,"value":355},{"type":52,"tag":193,"props":434,"children":435},{"style":216},[436],{"type":57,"value":119},{"type":52,"tag":193,"props":438,"children":439},{"style":222},[440],{"type":57,"value":441},"emailTemplates",{"type":52,"tag":193,"props":443,"children":444},{"style":216},[445],{"type":57,"value":119},{"type":52,"tag":193,"props":447,"children":448},{"style":222},[449],{"type":57,"value":450},"siteName",{"type":52,"tag":193,"props":452,"children":453},{"style":216},[454],{"type":57,"value":455}," =",{"type":52,"tag":193,"props":457,"children":458},{"style":216},[459],{"type":57,"value":240},{"type":52,"tag":193,"props":461,"children":462},{"style":243},[463],{"type":57,"value":464},"My App",{"type":52,"tag":193,"props":466,"children":467},{"style":216},[468],{"type":57,"value":251},{"type":52,"tag":193,"props":470,"children":471},{"style":216},[472],{"type":57,"value":256},{"type":52,"tag":193,"props":474,"children":476},{"class":195,"line":475},11,[477,481,485,489,493,498,502,506,511,515],{"type":52,"tag":193,"props":478,"children":479},{"style":222},[480],{"type":57,"value":355},{"type":52,"tag":193,"props":482,"children":483},{"style":216},[484],{"type":57,"value":119},{"type":52,"tag":193,"props":486,"children":487},{"style":222},[488],{"type":57,"value":441},{"type":52,"tag":193,"props":490,"children":491},{"style":216},[492],{"type":57,"value":119},{"type":52,"tag":193,"props":494,"children":495},{"style":222},[496],{"type":57,"value":497},"from",{"type":52,"tag":193,"props":499,"children":500},{"style":216},[501],{"type":57,"value":455},{"type":52,"tag":193,"props":503,"children":504},{"style":216},[505],{"type":57,"value":240},{"type":52,"tag":193,"props":507,"children":508},{"style":243},[509],{"type":57,"value":510},"no-reply@example.com",{"type":52,"tag":193,"props":512,"children":513},{"style":216},[514],{"type":57,"value":251},{"type":52,"tag":193,"props":516,"children":517},{"style":216},[518],{"type":57,"value":256},{"type":52,"tag":193,"props":520,"children":522},{"class":195,"line":521},12,[523,528,532],{"type":52,"tag":193,"props":524,"children":525},{"style":216},[526],{"type":57,"value":527},"}",{"type":52,"tag":193,"props":529,"children":530},{"style":222},[531],{"type":57,"value":412},{"type":52,"tag":193,"props":533,"children":534},{"style":216},[535],{"type":57,"value":256},{"type":52,"tag":60,"props":537,"children":538},{},[539,541,546],{"type":57,"value":540},"The ",{"type":52,"tag":64,"props":542,"children":544},{"className":543},[],[545],{"type":57,"value":497},{"type":57,"value":547}," address is required; Meteor 3.5+ logs a server warning if you\nomit it.",{"type":52,"tag":60,"props":549,"children":550},{},[551,553,559,561,567,569,575,577,583,585,590],{"type":57,"value":552},"Do not set ",{"type":52,"tag":64,"props":554,"children":556},{"className":555},[],[557],{"type":57,"value":558},"forbidClientAccountCreation: true",{"type":57,"value":560}," when the client signup form\ncalls ",{"type":52,"tag":64,"props":562,"children":564},{"className":563},[],[565],{"type":57,"value":566},"Accounts.createUser",{"type":57,"value":568}," or ",{"type":52,"tag":64,"props":570,"children":572},{"className":571},[],[573],{"type":57,"value":574},"Accounts.createUserAsync",{"type":57,"value":576},". The server rejects\nthat request with ",{"type":52,"tag":64,"props":578,"children":580},{"className":579},[],[581],{"type":57,"value":582},"403 Signups forbidden",{"type":57,"value":584},". For invite-only or administrator\nprovisioning, set the option on both client and server, remove the public\nsignup UI, and call ",{"type":52,"tag":64,"props":586,"children":588},{"className":587},[],[589],{"type":57,"value":574},{"type":57,"value":591}," only from trusted server code\nafter its own authorization check.",{"type":52,"tag":182,"props":593,"children":595},{"className":184,"code":594,"language":186,"meta":187,"style":187},"\u002F\u002F client\u002Fsignin.js (Meteor 3.5+)\nimport { Meteor } from \"meteor\u002Fmeteor\";\nimport { Accounts } from \"meteor\u002Faccounts-base\";\n\nasync function signUp({ email, password }) {\n  await Accounts.createUserAsync({ email, password });\n}\n\nasync function signIn({ email, password }) {\n  await Meteor.loginWithPasswordAsync(email, password);\n}\n",[596],{"type":52,"tag":64,"props":597,"children":598},{"__ignoreMap":187},[599,607,646,685,692,740,794,802,809,849,894],{"type":52,"tag":193,"props":600,"children":601},{"class":195,"line":196},[602],{"type":52,"tag":193,"props":603,"children":604},{"style":200},[605],{"type":57,"value":606},"\u002F\u002F client\u002Fsignin.js (Meteor 3.5+)\n",{"type":52,"tag":193,"props":608,"children":609},{"class":195,"line":206},[610,614,618,622,626,630,634,638,642],{"type":52,"tag":193,"props":611,"children":612},{"style":210},[613],{"type":57,"value":213},{"type":52,"tag":193,"props":615,"children":616},{"style":216},[617],{"type":57,"value":219},{"type":52,"tag":193,"props":619,"children":620},{"style":222},[621],{"type":57,"value":273},{"type":52,"tag":193,"props":623,"children":624},{"style":216},[625],{"type":57,"value":230},{"type":52,"tag":193,"props":627,"children":628},{"style":210},[629],{"type":57,"value":235},{"type":52,"tag":193,"props":631,"children":632},{"style":216},[633],{"type":57,"value":240},{"type":52,"tag":193,"props":635,"children":636},{"style":243},[637],{"type":57,"value":290},{"type":52,"tag":193,"props":639,"children":640},{"style":216},[641],{"type":57,"value":251},{"type":52,"tag":193,"props":643,"children":644},{"style":216},[645],{"type":57,"value":256},{"type":52,"tag":193,"props":647,"children":648},{"class":195,"line":259},[649,653,657,661,665,669,673,677,681],{"type":52,"tag":193,"props":650,"children":651},{"style":210},[652],{"type":57,"value":213},{"type":52,"tag":193,"props":654,"children":655},{"style":216},[656],{"type":57,"value":219},{"type":52,"tag":193,"props":658,"children":659},{"style":222},[660],{"type":57,"value":225},{"type":52,"tag":193,"props":662,"children":663},{"style":216},[664],{"type":57,"value":230},{"type":52,"tag":193,"props":666,"children":667},{"style":210},[668],{"type":57,"value":235},{"type":52,"tag":193,"props":670,"children":671},{"style":216},[672],{"type":57,"value":240},{"type":52,"tag":193,"props":674,"children":675},{"style":243},[676],{"type":57,"value":246},{"type":52,"tag":193,"props":678,"children":679},{"style":216},[680],{"type":57,"value":251},{"type":52,"tag":193,"props":682,"children":683},{"style":216},[684],{"type":57,"value":256},{"type":52,"tag":193,"props":686,"children":687},{"class":195,"line":23},[688],{"type":52,"tag":193,"props":689,"children":690},{"emptyLinePlaceholder":304},[691],{"type":57,"value":307},{"type":52,"tag":193,"props":693,"children":694},{"class":195,"line":310},[695,700,705,710,715,721,726,731,736],{"type":52,"tag":193,"props":696,"children":697},{"style":338},[698],{"type":57,"value":699},"async",{"type":52,"tag":193,"props":701,"children":702},{"style":338},[703],{"type":57,"value":704}," function",{"type":52,"tag":193,"props":706,"children":707},{"style":322},[708],{"type":57,"value":709}," signUp",{"type":52,"tag":193,"props":711,"children":712},{"style":216},[713],{"type":57,"value":714},"({",{"type":52,"tag":193,"props":716,"children":718},{"style":717},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[719],{"type":57,"value":720}," email",{"type":52,"tag":193,"props":722,"children":723},{"style":216},[724],{"type":57,"value":725},",",{"type":52,"tag":193,"props":727,"children":728},{"style":717},[729],{"type":57,"value":730}," password",{"type":52,"tag":193,"props":732,"children":733},{"style":216},[734],{"type":57,"value":735}," })",{"type":52,"tag":193,"props":737,"children":738},{"style":216},[739],{"type":57,"value":346},{"type":52,"tag":193,"props":741,"children":742},{"class":195,"line":349},[743,748,752,756,761,765,770,774,778,782,786,790],{"type":52,"tag":193,"props":744,"children":745},{"style":210},[746],{"type":57,"value":747},"  await",{"type":52,"tag":193,"props":749,"children":750},{"style":222},[751],{"type":57,"value":225},{"type":52,"tag":193,"props":753,"children":754},{"style":216},[755],{"type":57,"value":119},{"type":52,"tag":193,"props":757,"children":758},{"style":322},[759],{"type":57,"value":760},"createUserAsync",{"type":52,"tag":193,"props":762,"children":763},{"style":367},[764],{"type":57,"value":330},{"type":52,"tag":193,"props":766,"children":767},{"style":216},[768],{"type":57,"value":769},"{",{"type":52,"tag":193,"props":771,"children":772},{"style":222},[773],{"type":57,"value":720},{"type":52,"tag":193,"props":775,"children":776},{"style":216},[777],{"type":57,"value":725},{"type":52,"tag":193,"props":779,"children":780},{"style":222},[781],{"type":57,"value":730},{"type":52,"tag":193,"props":783,"children":784},{"style":216},[785],{"type":57,"value":230},{"type":52,"tag":193,"props":787,"children":788},{"style":367},[789],{"type":57,"value":412},{"type":52,"tag":193,"props":791,"children":792},{"style":216},[793],{"type":57,"value":256},{"type":52,"tag":193,"props":795,"children":796},{"class":195,"line":377},[797],{"type":52,"tag":193,"props":798,"children":799},{"style":216},[800],{"type":57,"value":801},"}\n",{"type":52,"tag":193,"props":803,"children":804},{"class":195,"line":401},[805],{"type":52,"tag":193,"props":806,"children":807},{"emptyLinePlaceholder":304},[808],{"type":57,"value":307},{"type":52,"tag":193,"props":810,"children":811},{"class":195,"line":419},[812,816,820,825,829,833,837,841,845],{"type":52,"tag":193,"props":813,"children":814},{"style":338},[815],{"type":57,"value":699},{"type":52,"tag":193,"props":817,"children":818},{"style":338},[819],{"type":57,"value":704},{"type":52,"tag":193,"props":821,"children":822},{"style":322},[823],{"type":57,"value":824}," signIn",{"type":52,"tag":193,"props":826,"children":827},{"style":216},[828],{"type":57,"value":714},{"type":52,"tag":193,"props":830,"children":831},{"style":717},[832],{"type":57,"value":720},{"type":52,"tag":193,"props":834,"children":835},{"style":216},[836],{"type":57,"value":725},{"type":52,"tag":193,"props":838,"children":839},{"style":717},[840],{"type":57,"value":730},{"type":52,"tag":193,"props":842,"children":843},{"style":216},[844],{"type":57,"value":735},{"type":52,"tag":193,"props":846,"children":847},{"style":216},[848],{"type":57,"value":346},{"type":52,"tag":193,"props":850,"children":851},{"class":195,"line":427},[852,856,860,864,869,873,878,882,886,890],{"type":52,"tag":193,"props":853,"children":854},{"style":210},[855],{"type":57,"value":747},{"type":52,"tag":193,"props":857,"children":858},{"style":222},[859],{"type":57,"value":273},{"type":52,"tag":193,"props":861,"children":862},{"style":216},[863],{"type":57,"value":119},{"type":52,"tag":193,"props":865,"children":866},{"style":322},[867],{"type":57,"value":868},"loginWithPasswordAsync",{"type":52,"tag":193,"props":870,"children":871},{"style":367},[872],{"type":57,"value":330},{"type":52,"tag":193,"props":874,"children":875},{"style":222},[876],{"type":57,"value":877},"email",{"type":52,"tag":193,"props":879,"children":880},{"style":216},[881],{"type":57,"value":725},{"type":52,"tag":193,"props":883,"children":884},{"style":222},[885],{"type":57,"value":730},{"type":52,"tag":193,"props":887,"children":888},{"style":367},[889],{"type":57,"value":412},{"type":52,"tag":193,"props":891,"children":892},{"style":216},[893],{"type":57,"value":256},{"type":52,"tag":193,"props":895,"children":896},{"class":195,"line":475},[897],{"type":52,"tag":193,"props":898,"children":899},{"style":216},[900],{"type":57,"value":801},{"type":52,"tag":60,"props":902,"children":903},{},[904,906,912,914,920,922,928],{"type":57,"value":905},"Client ",{"type":52,"tag":64,"props":907,"children":909},{"className":908},[],[910],{"type":57,"value":911},"Accounts.createUser(options, callback)",{"type":57,"value":913}," also remains supported.\n",{"type":52,"tag":64,"props":915,"children":917},{"className":916},[],[918],{"type":57,"value":919},"Meteor.loginWithPasswordAsync",{"type":57,"value":921}," was added in Meteor 3.5; on older 3.x use\nthe callback form of ",{"type":52,"tag":64,"props":923,"children":925},{"className":924},[],[926],{"type":57,"value":927},"Meteor.loginWithPassword",{"type":57,"value":929}," or wrap it in a Promise.",{"type":52,"tag":60,"props":931,"children":932},{},[933,935,941,943,949],{"type":57,"value":934},"On the server use ",{"type":52,"tag":64,"props":936,"children":938},{"className":937},[],[939],{"type":57,"value":940},"await Accounts.createUserAsync(options)",{"type":57,"value":942}," and\n",{"type":52,"tag":64,"props":944,"children":946},{"className":945},[],[947],{"type":57,"value":948},"await Accounts.setPasswordAsync(userId, newPassword)",{"type":57,"value":119},{"type":52,"tag":97,"props":951,"children":953},{"id":952},"httponly-cookies-meteor-33",[954],{"type":57,"value":955},"HttpOnly cookies (Meteor 3.3+)",{"type":52,"tag":60,"props":957,"children":958},{},[959],{"type":57,"value":960},"Default token storage is Web Storage. To move the resume token into an\nHttpOnly cookie and keep the client tab in-memory only:",{"type":52,"tag":182,"props":962,"children":964},{"className":184,"code":963,"language":186,"meta":187,"style":187},"\u002F\u002F server\nMeteor.startup(() => {\n  Accounts.config({\n    clientStorage: \"none\",\n    useHttpOnlyCookies: true,\n  });\n});\n",[965],{"type":52,"tag":64,"props":966,"children":967},{"__ignoreMap":187},[968,976,1007,1030,1059,1079,1094],{"type":52,"tag":193,"props":969,"children":970},{"class":195,"line":196},[971],{"type":52,"tag":193,"props":972,"children":973},{"style":200},[974],{"type":57,"value":975},"\u002F\u002F server\n",{"type":52,"tag":193,"props":977,"children":978},{"class":195,"line":206},[979,983,987,991,995,999,1003],{"type":52,"tag":193,"props":980,"children":981},{"style":222},[982],{"type":57,"value":9},{"type":52,"tag":193,"props":984,"children":985},{"style":216},[986],{"type":57,"value":119},{"type":52,"tag":193,"props":988,"children":989},{"style":322},[990],{"type":57,"value":325},{"type":52,"tag":193,"props":992,"children":993},{"style":222},[994],{"type":57,"value":330},{"type":52,"tag":193,"props":996,"children":997},{"style":216},[998],{"type":57,"value":335},{"type":52,"tag":193,"props":1000,"children":1001},{"style":338},[1002],{"type":57,"value":341},{"type":52,"tag":193,"props":1004,"children":1005},{"style":216},[1006],{"type":57,"value":346},{"type":52,"tag":193,"props":1008,"children":1009},{"class":195,"line":259},[1010,1014,1018,1022,1026],{"type":52,"tag":193,"props":1011,"children":1012},{"style":222},[1013],{"type":57,"value":355},{"type":52,"tag":193,"props":1015,"children":1016},{"style":216},[1017],{"type":57,"value":119},{"type":52,"tag":193,"props":1019,"children":1020},{"style":322},[1021],{"type":57,"value":364},{"type":52,"tag":193,"props":1023,"children":1024},{"style":367},[1025],{"type":57,"value":330},{"type":52,"tag":193,"props":1027,"children":1028},{"style":216},[1029],{"type":57,"value":374},{"type":52,"tag":193,"props":1031,"children":1032},{"class":195,"line":23},[1033,1038,1042,1046,1051,1055],{"type":52,"tag":193,"props":1034,"children":1035},{"style":367},[1036],{"type":57,"value":1037},"    clientStorage",{"type":52,"tag":193,"props":1039,"children":1040},{"style":216},[1041],{"type":57,"value":388},{"type":52,"tag":193,"props":1043,"children":1044},{"style":216},[1045],{"type":57,"value":240},{"type":52,"tag":193,"props":1047,"children":1048},{"style":243},[1049],{"type":57,"value":1050},"none",{"type":52,"tag":193,"props":1052,"children":1053},{"style":216},[1054],{"type":57,"value":251},{"type":52,"tag":193,"props":1056,"children":1057},{"style":216},[1058],{"type":57,"value":79},{"type":52,"tag":193,"props":1060,"children":1061},{"class":195,"line":310},[1062,1067,1071,1075],{"type":52,"tag":193,"props":1063,"children":1064},{"style":367},[1065],{"type":57,"value":1066},"    useHttpOnlyCookies",{"type":52,"tag":193,"props":1068,"children":1069},{"style":216},[1070],{"type":57,"value":388},{"type":52,"tag":193,"props":1072,"children":1073},{"style":391},[1074],{"type":57,"value":394},{"type":52,"tag":193,"props":1076,"children":1077},{"style":216},[1078],{"type":57,"value":79},{"type":52,"tag":193,"props":1080,"children":1081},{"class":195,"line":349},[1082,1086,1090],{"type":52,"tag":193,"props":1083,"children":1084},{"style":216},[1085],{"type":57,"value":407},{"type":52,"tag":193,"props":1087,"children":1088},{"style":367},[1089],{"type":57,"value":412},{"type":52,"tag":193,"props":1091,"children":1092},{"style":216},[1093],{"type":57,"value":256},{"type":52,"tag":193,"props":1095,"children":1096},{"class":195,"line":377},[1097,1101,1105],{"type":52,"tag":193,"props":1098,"children":1099},{"style":216},[1100],{"type":57,"value":527},{"type":52,"tag":193,"props":1102,"children":1103},{"style":222},[1104],{"type":57,"value":412},{"type":52,"tag":193,"props":1106,"children":1107},{"style":216},[1108],{"type":57,"value":256},{"type":52,"tag":182,"props":1110,"children":1114},{"className":1111,"code":1112,"language":1113,"meta":187,"style":187},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F settings.json (public; surfaces the same flags to the client)\n{\n  \"public\": {\n    \"packages\": {\n      \"accounts\": {\n        \"clientStorage\": \"none\",\n        \"useHttpOnlyCookies\": true\n      }\n    }\n  }\n}\n","json",[1115],{"type":52,"tag":64,"props":1116,"children":1117},{"__ignoreMap":187},[1118,1126,1133,1158,1184,1210,1247,1272,1280,1288,1296],{"type":52,"tag":193,"props":1119,"children":1120},{"class":195,"line":196},[1121],{"type":52,"tag":193,"props":1122,"children":1123},{"style":200},[1124],{"type":57,"value":1125},"\u002F\u002F settings.json (public; surfaces the same flags to the client)\n",{"type":52,"tag":193,"props":1127,"children":1128},{"class":195,"line":206},[1129],{"type":52,"tag":193,"props":1130,"children":1131},{"style":216},[1132],{"type":57,"value":374},{"type":52,"tag":193,"props":1134,"children":1135},{"class":195,"line":259},[1136,1141,1146,1150,1154],{"type":52,"tag":193,"props":1137,"children":1138},{"style":216},[1139],{"type":57,"value":1140},"  \"",{"type":52,"tag":193,"props":1142,"children":1143},{"style":338},[1144],{"type":57,"value":1145},"public",{"type":52,"tag":193,"props":1147,"children":1148},{"style":216},[1149],{"type":57,"value":251},{"type":52,"tag":193,"props":1151,"children":1152},{"style":216},[1153],{"type":57,"value":388},{"type":52,"tag":193,"props":1155,"children":1156},{"style":216},[1157],{"type":57,"value":346},{"type":52,"tag":193,"props":1159,"children":1160},{"class":195,"line":23},[1161,1166,1172,1176,1180],{"type":52,"tag":193,"props":1162,"children":1163},{"style":216},[1164],{"type":57,"value":1165},"    \"",{"type":52,"tag":193,"props":1167,"children":1169},{"style":1168},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1170],{"type":57,"value":1171},"packages",{"type":52,"tag":193,"props":1173,"children":1174},{"style":216},[1175],{"type":57,"value":251},{"type":52,"tag":193,"props":1177,"children":1178},{"style":216},[1179],{"type":57,"value":388},{"type":52,"tag":193,"props":1181,"children":1182},{"style":216},[1183],{"type":57,"value":346},{"type":52,"tag":193,"props":1185,"children":1186},{"class":195,"line":310},[1187,1192,1198,1202,1206],{"type":52,"tag":193,"props":1188,"children":1189},{"style":216},[1190],{"type":57,"value":1191},"      \"",{"type":52,"tag":193,"props":1193,"children":1195},{"style":1194},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1196],{"type":57,"value":1197},"accounts",{"type":52,"tag":193,"props":1199,"children":1200},{"style":216},[1201],{"type":57,"value":251},{"type":52,"tag":193,"props":1203,"children":1204},{"style":216},[1205],{"type":57,"value":388},{"type":52,"tag":193,"props":1207,"children":1208},{"style":216},[1209],{"type":57,"value":346},{"type":52,"tag":193,"props":1211,"children":1212},{"class":195,"line":349},[1213,1218,1223,1227,1231,1235,1239,1243],{"type":52,"tag":193,"props":1214,"children":1215},{"style":216},[1216],{"type":57,"value":1217},"        \"",{"type":52,"tag":193,"props":1219,"children":1220},{"style":367},[1221],{"type":57,"value":1222},"clientStorage",{"type":52,"tag":193,"props":1224,"children":1225},{"style":216},[1226],{"type":57,"value":251},{"type":52,"tag":193,"props":1228,"children":1229},{"style":216},[1230],{"type":57,"value":388},{"type":52,"tag":193,"props":1232,"children":1233},{"style":216},[1234],{"type":57,"value":240},{"type":52,"tag":193,"props":1236,"children":1237},{"style":243},[1238],{"type":57,"value":1050},{"type":52,"tag":193,"props":1240,"children":1241},{"style":216},[1242],{"type":57,"value":251},{"type":52,"tag":193,"props":1244,"children":1245},{"style":216},[1246],{"type":57,"value":79},{"type":52,"tag":193,"props":1248,"children":1249},{"class":195,"line":377},[1250,1254,1259,1263,1267],{"type":52,"tag":193,"props":1251,"children":1252},{"style":216},[1253],{"type":57,"value":1217},{"type":52,"tag":193,"props":1255,"children":1256},{"style":367},[1257],{"type":57,"value":1258},"useHttpOnlyCookies",{"type":52,"tag":193,"props":1260,"children":1261},{"style":216},[1262],{"type":57,"value":251},{"type":52,"tag":193,"props":1264,"children":1265},{"style":216},[1266],{"type":57,"value":388},{"type":52,"tag":193,"props":1268,"children":1269},{"style":216},[1270],{"type":57,"value":1271}," true\n",{"type":52,"tag":193,"props":1273,"children":1274},{"class":195,"line":401},[1275],{"type":52,"tag":193,"props":1276,"children":1277},{"style":216},[1278],{"type":57,"value":1279},"      }\n",{"type":52,"tag":193,"props":1281,"children":1282},{"class":195,"line":419},[1283],{"type":52,"tag":193,"props":1284,"children":1285},{"style":216},[1286],{"type":57,"value":1287},"    }\n",{"type":52,"tag":193,"props":1289,"children":1290},{"class":195,"line":427},[1291],{"type":52,"tag":193,"props":1292,"children":1293},{"style":216},[1294],{"type":57,"value":1295},"  }\n",{"type":52,"tag":193,"props":1297,"children":1298},{"class":195,"line":475},[1299],{"type":52,"tag":193,"props":1300,"children":1301},{"style":216},[1302],{"type":57,"value":801},{"type":52,"tag":60,"props":1304,"children":1305},{},[1306,1308,1314,1316,1322,1324,1330],{"type":57,"value":1307},"After restart and login, ",{"type":52,"tag":64,"props":1309,"children":1311},{"className":1310},[],[1312],{"type":57,"value":1313},"Meteor.loginToken*",{"type":57,"value":1315}," no longer appears in\n",{"type":52,"tag":64,"props":1317,"children":1319},{"className":1318},[],[1320],{"type":57,"value":1321},"localStorage",{"type":57,"value":1323},"; the browser receives an HttpOnly ",{"type":52,"tag":64,"props":1325,"children":1327},{"className":1326},[],[1328],{"type":57,"value":1329},"meteor_login_token",{"type":57,"value":1331},"\ncookie. Each tab keeps its own in-memory credentials.",{"type":52,"tag":97,"props":1333,"children":1335},{"id":1334},"oauth-google-example",[1336],{"type":57,"value":1337},"OAuth (Google example)",{"type":52,"tag":182,"props":1339,"children":1341},{"className":184,"code":1340,"language":186,"meta":187,"style":187},"\u002F\u002F server\u002Foauth.js\nimport { ServiceConfiguration } from \"meteor\u002Fservice-configuration\";\n\nawait ServiceConfiguration.configurations.upsertAsync(\n  { service: \"google\" },\n  {\n    $set: {\n      clientId: process.env.GOOGLE_CLIENT_ID,\n      secret: process.env.GOOGLE_CLIENT_SECRET,\n      loginStyle: \"popup\",\n    },\n  },\n);\n",[1342],{"type":52,"tag":64,"props":1343,"children":1344},{"__ignoreMap":187},[1345,1353,1394,1401,1436,1471,1479,1495,1534,1571,1600,1608,1616],{"type":52,"tag":193,"props":1346,"children":1347},{"class":195,"line":196},[1348],{"type":52,"tag":193,"props":1349,"children":1350},{"style":200},[1351],{"type":57,"value":1352},"\u002F\u002F server\u002Foauth.js\n",{"type":52,"tag":193,"props":1354,"children":1355},{"class":195,"line":206},[1356,1360,1364,1369,1373,1377,1381,1386,1390],{"type":52,"tag":193,"props":1357,"children":1358},{"style":210},[1359],{"type":57,"value":213},{"type":52,"tag":193,"props":1361,"children":1362},{"style":216},[1363],{"type":57,"value":219},{"type":52,"tag":193,"props":1365,"children":1366},{"style":222},[1367],{"type":57,"value":1368}," ServiceConfiguration",{"type":52,"tag":193,"props":1370,"children":1371},{"style":216},[1372],{"type":57,"value":230},{"type":52,"tag":193,"props":1374,"children":1375},{"style":210},[1376],{"type":57,"value":235},{"type":52,"tag":193,"props":1378,"children":1379},{"style":216},[1380],{"type":57,"value":240},{"type":52,"tag":193,"props":1382,"children":1383},{"style":243},[1384],{"type":57,"value":1385},"meteor\u002Fservice-configuration",{"type":52,"tag":193,"props":1387,"children":1388},{"style":216},[1389],{"type":57,"value":251},{"type":52,"tag":193,"props":1391,"children":1392},{"style":216},[1393],{"type":57,"value":256},{"type":52,"tag":193,"props":1395,"children":1396},{"class":195,"line":259},[1397],{"type":52,"tag":193,"props":1398,"children":1399},{"emptyLinePlaceholder":304},[1400],{"type":57,"value":307},{"type":52,"tag":193,"props":1402,"children":1403},{"class":195,"line":23},[1404,1409,1413,1417,1422,1426,1431],{"type":52,"tag":193,"props":1405,"children":1406},{"style":210},[1407],{"type":57,"value":1408},"await",{"type":52,"tag":193,"props":1410,"children":1411},{"style":222},[1412],{"type":57,"value":1368},{"type":52,"tag":193,"props":1414,"children":1415},{"style":216},[1416],{"type":57,"value":119},{"type":52,"tag":193,"props":1418,"children":1419},{"style":222},[1420],{"type":57,"value":1421},"configurations",{"type":52,"tag":193,"props":1423,"children":1424},{"style":216},[1425],{"type":57,"value":119},{"type":52,"tag":193,"props":1427,"children":1428},{"style":322},[1429],{"type":57,"value":1430},"upsertAsync",{"type":52,"tag":193,"props":1432,"children":1433},{"style":222},[1434],{"type":57,"value":1435},"(\n",{"type":52,"tag":193,"props":1437,"children":1438},{"class":195,"line":310},[1439,1444,1449,1453,1457,1462,1466],{"type":52,"tag":193,"props":1440,"children":1441},{"style":216},[1442],{"type":57,"value":1443},"  {",{"type":52,"tag":193,"props":1445,"children":1446},{"style":367},[1447],{"type":57,"value":1448}," service",{"type":52,"tag":193,"props":1450,"children":1451},{"style":216},[1452],{"type":57,"value":388},{"type":52,"tag":193,"props":1454,"children":1455},{"style":216},[1456],{"type":57,"value":240},{"type":52,"tag":193,"props":1458,"children":1459},{"style":243},[1460],{"type":57,"value":1461},"google",{"type":52,"tag":193,"props":1463,"children":1464},{"style":216},[1465],{"type":57,"value":251},{"type":52,"tag":193,"props":1467,"children":1468},{"style":216},[1469],{"type":57,"value":1470}," },\n",{"type":52,"tag":193,"props":1472,"children":1473},{"class":195,"line":349},[1474],{"type":52,"tag":193,"props":1475,"children":1476},{"style":216},[1477],{"type":57,"value":1478},"  {\n",{"type":52,"tag":193,"props":1480,"children":1481},{"class":195,"line":377},[1482,1487,1491],{"type":52,"tag":193,"props":1483,"children":1484},{"style":367},[1485],{"type":57,"value":1486},"    $set",{"type":52,"tag":193,"props":1488,"children":1489},{"style":216},[1490],{"type":57,"value":388},{"type":52,"tag":193,"props":1492,"children":1493},{"style":216},[1494],{"type":57,"value":346},{"type":52,"tag":193,"props":1496,"children":1497},{"class":195,"line":401},[1498,1503,1507,1512,1516,1521,1525,1530],{"type":52,"tag":193,"props":1499,"children":1500},{"style":367},[1501],{"type":57,"value":1502},"      clientId",{"type":52,"tag":193,"props":1504,"children":1505},{"style":216},[1506],{"type":57,"value":388},{"type":52,"tag":193,"props":1508,"children":1509},{"style":222},[1510],{"type":57,"value":1511}," process",{"type":52,"tag":193,"props":1513,"children":1514},{"style":216},[1515],{"type":57,"value":119},{"type":52,"tag":193,"props":1517,"children":1518},{"style":222},[1519],{"type":57,"value":1520},"env",{"type":52,"tag":193,"props":1522,"children":1523},{"style":216},[1524],{"type":57,"value":119},{"type":52,"tag":193,"props":1526,"children":1527},{"style":222},[1528],{"type":57,"value":1529},"GOOGLE_CLIENT_ID",{"type":52,"tag":193,"props":1531,"children":1532},{"style":216},[1533],{"type":57,"value":79},{"type":52,"tag":193,"props":1535,"children":1536},{"class":195,"line":419},[1537,1542,1546,1550,1554,1558,1562,1567],{"type":52,"tag":193,"props":1538,"children":1539},{"style":367},[1540],{"type":57,"value":1541},"      secret",{"type":52,"tag":193,"props":1543,"children":1544},{"style":216},[1545],{"type":57,"value":388},{"type":52,"tag":193,"props":1547,"children":1548},{"style":222},[1549],{"type":57,"value":1511},{"type":52,"tag":193,"props":1551,"children":1552},{"style":216},[1553],{"type":57,"value":119},{"type":52,"tag":193,"props":1555,"children":1556},{"style":222},[1557],{"type":57,"value":1520},{"type":52,"tag":193,"props":1559,"children":1560},{"style":216},[1561],{"type":57,"value":119},{"type":52,"tag":193,"props":1563,"children":1564},{"style":222},[1565],{"type":57,"value":1566},"GOOGLE_CLIENT_SECRET",{"type":52,"tag":193,"props":1568,"children":1569},{"style":216},[1570],{"type":57,"value":79},{"type":52,"tag":193,"props":1572,"children":1573},{"class":195,"line":427},[1574,1579,1583,1587,1592,1596],{"type":52,"tag":193,"props":1575,"children":1576},{"style":367},[1577],{"type":57,"value":1578},"      loginStyle",{"type":52,"tag":193,"props":1580,"children":1581},{"style":216},[1582],{"type":57,"value":388},{"type":52,"tag":193,"props":1584,"children":1585},{"style":216},[1586],{"type":57,"value":240},{"type":52,"tag":193,"props":1588,"children":1589},{"style":243},[1590],{"type":57,"value":1591},"popup",{"type":52,"tag":193,"props":1593,"children":1594},{"style":216},[1595],{"type":57,"value":251},{"type":52,"tag":193,"props":1597,"children":1598},{"style":216},[1599],{"type":57,"value":79},{"type":52,"tag":193,"props":1601,"children":1602},{"class":195,"line":475},[1603],{"type":52,"tag":193,"props":1604,"children":1605},{"style":216},[1606],{"type":57,"value":1607},"    },\n",{"type":52,"tag":193,"props":1609,"children":1610},{"class":195,"line":521},[1611],{"type":52,"tag":193,"props":1612,"children":1613},{"style":216},[1614],{"type":57,"value":1615},"  },\n",{"type":52,"tag":193,"props":1617,"children":1619},{"class":195,"line":1618},13,[1620,1624],{"type":52,"tag":193,"props":1621,"children":1622},{"style":222},[1623],{"type":57,"value":412},{"type":52,"tag":193,"props":1625,"children":1626},{"style":216},[1627],{"type":57,"value":256},{"type":52,"tag":182,"props":1629,"children":1631},{"className":184,"code":1630,"language":186,"meta":187,"style":187},"\u002F\u002F client\nMeteor.loginWithGoogle(\n  { requestPermissions: [\"email\", \"profile\"] },\n  (err) => { if (err) console.error(err); },\n);\n",[1632],{"type":52,"tag":64,"props":1633,"children":1634},{"__ignoreMap":187},[1635,1643,1663,1723,1802],{"type":52,"tag":193,"props":1636,"children":1637},{"class":195,"line":196},[1638],{"type":52,"tag":193,"props":1639,"children":1640},{"style":200},[1641],{"type":57,"value":1642},"\u002F\u002F client\n",{"type":52,"tag":193,"props":1644,"children":1645},{"class":195,"line":206},[1646,1650,1654,1659],{"type":52,"tag":193,"props":1647,"children":1648},{"style":222},[1649],{"type":57,"value":9},{"type":52,"tag":193,"props":1651,"children":1652},{"style":216},[1653],{"type":57,"value":119},{"type":52,"tag":193,"props":1655,"children":1656},{"style":322},[1657],{"type":57,"value":1658},"loginWithGoogle",{"type":52,"tag":193,"props":1660,"children":1661},{"style":222},[1662],{"type":57,"value":1435},{"type":52,"tag":193,"props":1664,"children":1665},{"class":195,"line":259},[1666,1670,1675,1679,1684,1688,1692,1696,1700,1704,1709,1713,1718],{"type":52,"tag":193,"props":1667,"children":1668},{"style":216},[1669],{"type":57,"value":1443},{"type":52,"tag":193,"props":1671,"children":1672},{"style":367},[1673],{"type":57,"value":1674}," requestPermissions",{"type":52,"tag":193,"props":1676,"children":1677},{"style":216},[1678],{"type":57,"value":388},{"type":52,"tag":193,"props":1680,"children":1681},{"style":222},[1682],{"type":57,"value":1683}," [",{"type":52,"tag":193,"props":1685,"children":1686},{"style":216},[1687],{"type":57,"value":251},{"type":52,"tag":193,"props":1689,"children":1690},{"style":243},[1691],{"type":57,"value":877},{"type":52,"tag":193,"props":1693,"children":1694},{"style":216},[1695],{"type":57,"value":251},{"type":52,"tag":193,"props":1697,"children":1698},{"style":216},[1699],{"type":57,"value":725},{"type":52,"tag":193,"props":1701,"children":1702},{"style":216},[1703],{"type":57,"value":240},{"type":52,"tag":193,"props":1705,"children":1706},{"style":243},[1707],{"type":57,"value":1708},"profile",{"type":52,"tag":193,"props":1710,"children":1711},{"style":216},[1712],{"type":57,"value":251},{"type":52,"tag":193,"props":1714,"children":1715},{"style":222},[1716],{"type":57,"value":1717},"] ",{"type":52,"tag":193,"props":1719,"children":1720},{"style":216},[1721],{"type":57,"value":1722},"},\n",{"type":52,"tag":193,"props":1724,"children":1725},{"class":195,"line":23},[1726,1731,1736,1740,1744,1748,1753,1758,1762,1767,1772,1776,1781,1785,1789,1793,1798],{"type":52,"tag":193,"props":1727,"children":1728},{"style":216},[1729],{"type":57,"value":1730},"  (",{"type":52,"tag":193,"props":1732,"children":1733},{"style":717},[1734],{"type":57,"value":1735},"err",{"type":52,"tag":193,"props":1737,"children":1738},{"style":216},[1739],{"type":57,"value":412},{"type":52,"tag":193,"props":1741,"children":1742},{"style":338},[1743],{"type":57,"value":341},{"type":52,"tag":193,"props":1745,"children":1746},{"style":216},[1747],{"type":57,"value":219},{"type":52,"tag":193,"props":1749,"children":1750},{"style":210},[1751],{"type":57,"value":1752}," if",{"type":52,"tag":193,"props":1754,"children":1755},{"style":367},[1756],{"type":57,"value":1757}," (",{"type":52,"tag":193,"props":1759,"children":1760},{"style":222},[1761],{"type":57,"value":1735},{"type":52,"tag":193,"props":1763,"children":1764},{"style":367},[1765],{"type":57,"value":1766},") ",{"type":52,"tag":193,"props":1768,"children":1769},{"style":222},[1770],{"type":57,"value":1771},"console",{"type":52,"tag":193,"props":1773,"children":1774},{"style":216},[1775],{"type":57,"value":119},{"type":52,"tag":193,"props":1777,"children":1778},{"style":322},[1779],{"type":57,"value":1780},"error",{"type":52,"tag":193,"props":1782,"children":1783},{"style":367},[1784],{"type":57,"value":330},{"type":52,"tag":193,"props":1786,"children":1787},{"style":222},[1788],{"type":57,"value":1735},{"type":52,"tag":193,"props":1790,"children":1791},{"style":367},[1792],{"type":57,"value":412},{"type":52,"tag":193,"props":1794,"children":1795},{"style":216},[1796],{"type":57,"value":1797},";",{"type":52,"tag":193,"props":1799,"children":1800},{"style":216},[1801],{"type":57,"value":1470},{"type":52,"tag":193,"props":1803,"children":1804},{"class":195,"line":310},[1805,1809],{"type":52,"tag":193,"props":1806,"children":1807},{"style":222},[1808],{"type":57,"value":412},{"type":52,"tag":193,"props":1810,"children":1811},{"style":216},[1812],{"type":57,"value":256},{"type":52,"tag":60,"props":1814,"children":1815},{},[1816,1822,1824,1830,1832,1838,1840,1846,1848,1853,1855,1861,1862,1868,1869,1875,1876,1882,1883,1889,1890,1896],{"type":52,"tag":64,"props":1817,"children":1819},{"className":1818},[],[1820],{"type":57,"value":1821},"loginStyle: \"redirect\"",{"type":57,"value":1823}," for mobile or environments without\n",{"type":52,"tag":64,"props":1825,"children":1827},{"className":1826},[],[1828],{"type":57,"value":1829},"window.close",{"type":57,"value":1831}," \u002F ",{"type":52,"tag":64,"props":1833,"children":1835},{"className":1834},[],[1836],{"type":57,"value":1837},"window.opener",{"type":57,"value":1839},". Each provider ships its own\n",{"type":52,"tag":64,"props":1841,"children":1843},{"className":1842},[],[1844],{"type":57,"value":1845},"accounts-\u003Cservice>",{"type":57,"value":1847}," package: ",{"type":52,"tag":64,"props":1849,"children":1851},{"className":1850},[],[1852],{"type":57,"value":85},{"type":57,"value":1854},", ",{"type":52,"tag":64,"props":1856,"children":1858},{"className":1857},[],[1859],{"type":57,"value":1860},"accounts-github",{"type":57,"value":79},{"type":52,"tag":64,"props":1863,"children":1865},{"className":1864},[],[1866],{"type":57,"value":1867},"accounts-facebook",{"type":57,"value":1854},{"type":52,"tag":64,"props":1870,"children":1872},{"className":1871},[],[1873],{"type":57,"value":1874},"accounts-twitter",{"type":57,"value":1854},{"type":52,"tag":64,"props":1877,"children":1879},{"className":1878},[],[1880],{"type":57,"value":1881},"accounts-apple",{"type":57,"value":79},{"type":52,"tag":64,"props":1884,"children":1886},{"className":1885},[],[1887],{"type":57,"value":1888},"accounts-meetup",{"type":57,"value":1854},{"type":52,"tag":64,"props":1891,"children":1893},{"className":1892},[],[1894],{"type":57,"value":1895},"accounts-weibo",{"type":57,"value":119},{"type":52,"tag":60,"props":1898,"children":1899},{},[1900,1902,1908,1910,1916,1918,1924,1926,1932,1934,1940,1942,1948],{"type":57,"value":1901},"To encrypt OAuth secrets at rest, add ",{"type":52,"tag":64,"props":1903,"children":1905},{"className":1904},[],[1906],{"type":57,"value":1907},"oauth-encryption",{"type":57,"value":1909}," and pass\n",{"type":52,"tag":64,"props":1911,"children":1913},{"className":1912},[],[1914],{"type":57,"value":1915},"oauthSecretKey",{"type":57,"value":1917}," to ",{"type":52,"tag":64,"props":1919,"children":1921},{"className":1920},[],[1922],{"type":57,"value":1923},"Accounts.config",{"type":57,"value":1925},". This seals the provider application\nsecret in ",{"type":52,"tag":64,"props":1927,"children":1929},{"className":1928},[],[1930],{"type":57,"value":1931},"ServiceConfiguration.configurations.secret",{"type":57,"value":1933}," and the supported\nprovider-specific user token fields. It does not create a generic\n",{"type":52,"tag":64,"props":1935,"children":1937},{"className":1936},[],[1938],{"type":57,"value":1939},"Meteor.users.services.\u003Cprovider>.secret",{"type":57,"value":1941}," field. See ",{"type":52,"tag":64,"props":1943,"children":1945},{"className":1944},[],[1946],{"type":57,"value":1947},"meteor-security",{"type":57,"value":119},{"type":52,"tag":97,"props":1950,"children":1952},{"id":1951},"email-verification-and-reset",[1953],{"type":57,"value":1954},"Email verification and reset",{"type":52,"tag":182,"props":1956,"children":1958},{"className":184,"code":1957,"language":186,"meta":187,"style":187},"\u002F\u002F client\nAccounts.forgotPassword({ email }, (err) => { ... });\n\n\u002F\u002F reset page\nAccounts.resetPassword(token, newPassword, (err) => { ... });\n\n\u002F\u002F verify email\nAccounts.verifyEmail(token, (err) => { ... });\n",[1959],{"type":52,"tag":64,"props":1960,"children":1961},{"__ignoreMap":187},[1962,1969,2041,2048,2056,2126,2133,2141],{"type":52,"tag":193,"props":1963,"children":1964},{"class":195,"line":196},[1965],{"type":52,"tag":193,"props":1966,"children":1967},{"style":200},[1968],{"type":57,"value":1642},{"type":52,"tag":193,"props":1970,"children":1971},{"class":195,"line":206},[1972,1977,1981,1986,1990,1994,1999,2004,2008,2012,2016,2020,2024,2029,2033,2037],{"type":52,"tag":193,"props":1973,"children":1974},{"style":222},[1975],{"type":57,"value":1976},"Accounts",{"type":52,"tag":193,"props":1978,"children":1979},{"style":216},[1980],{"type":57,"value":119},{"type":52,"tag":193,"props":1982,"children":1983},{"style":322},[1984],{"type":57,"value":1985},"forgotPassword",{"type":52,"tag":193,"props":1987,"children":1988},{"style":222},[1989],{"type":57,"value":330},{"type":52,"tag":193,"props":1991,"children":1992},{"style":216},[1993],{"type":57,"value":769},{"type":52,"tag":193,"props":1995,"children":1996},{"style":222},[1997],{"type":57,"value":1998}," email ",{"type":52,"tag":193,"props":2000,"children":2001},{"style":216},[2002],{"type":57,"value":2003},"},",{"type":52,"tag":193,"props":2005,"children":2006},{"style":216},[2007],{"type":57,"value":1757},{"type":52,"tag":193,"props":2009,"children":2010},{"style":717},[2011],{"type":57,"value":1735},{"type":52,"tag":193,"props":2013,"children":2014},{"style":216},[2015],{"type":57,"value":412},{"type":52,"tag":193,"props":2017,"children":2018},{"style":338},[2019],{"type":57,"value":341},{"type":52,"tag":193,"props":2021,"children":2022},{"style":216},[2023],{"type":57,"value":219},{"type":52,"tag":193,"props":2025,"children":2026},{"style":216},[2027],{"type":57,"value":2028}," ...",{"type":52,"tag":193,"props":2030,"children":2031},{"style":216},[2032],{"type":57,"value":230},{"type":52,"tag":193,"props":2034,"children":2035},{"style":222},[2036],{"type":57,"value":412},{"type":52,"tag":193,"props":2038,"children":2039},{"style":216},[2040],{"type":57,"value":256},{"type":52,"tag":193,"props":2042,"children":2043},{"class":195,"line":259},[2044],{"type":52,"tag":193,"props":2045,"children":2046},{"emptyLinePlaceholder":304},[2047],{"type":57,"value":307},{"type":52,"tag":193,"props":2049,"children":2050},{"class":195,"line":23},[2051],{"type":52,"tag":193,"props":2052,"children":2053},{"style":200},[2054],{"type":57,"value":2055},"\u002F\u002F reset page\n",{"type":52,"tag":193,"props":2057,"children":2058},{"class":195,"line":310},[2059,2063,2067,2072,2077,2081,2086,2090,2094,2098,2102,2106,2110,2114,2118,2122],{"type":52,"tag":193,"props":2060,"children":2061},{"style":222},[2062],{"type":57,"value":1976},{"type":52,"tag":193,"props":2064,"children":2065},{"style":216},[2066],{"type":57,"value":119},{"type":52,"tag":193,"props":2068,"children":2069},{"style":322},[2070],{"type":57,"value":2071},"resetPassword",{"type":52,"tag":193,"props":2073,"children":2074},{"style":222},[2075],{"type":57,"value":2076},"(token",{"type":52,"tag":193,"props":2078,"children":2079},{"style":216},[2080],{"type":57,"value":725},{"type":52,"tag":193,"props":2082,"children":2083},{"style":222},[2084],{"type":57,"value":2085}," newPassword",{"type":52,"tag":193,"props":2087,"children":2088},{"style":216},[2089],{"type":57,"value":725},{"type":52,"tag":193,"props":2091,"children":2092},{"style":216},[2093],{"type":57,"value":1757},{"type":52,"tag":193,"props":2095,"children":2096},{"style":717},[2097],{"type":57,"value":1735},{"type":52,"tag":193,"props":2099,"children":2100},{"style":216},[2101],{"type":57,"value":412},{"type":52,"tag":193,"props":2103,"children":2104},{"style":338},[2105],{"type":57,"value":341},{"type":52,"tag":193,"props":2107,"children":2108},{"style":216},[2109],{"type":57,"value":219},{"type":52,"tag":193,"props":2111,"children":2112},{"style":216},[2113],{"type":57,"value":2028},{"type":52,"tag":193,"props":2115,"children":2116},{"style":216},[2117],{"type":57,"value":230},{"type":52,"tag":193,"props":2119,"children":2120},{"style":222},[2121],{"type":57,"value":412},{"type":52,"tag":193,"props":2123,"children":2124},{"style":216},[2125],{"type":57,"value":256},{"type":52,"tag":193,"props":2127,"children":2128},{"class":195,"line":349},[2129],{"type":52,"tag":193,"props":2130,"children":2131},{"emptyLinePlaceholder":304},[2132],{"type":57,"value":307},{"type":52,"tag":193,"props":2134,"children":2135},{"class":195,"line":377},[2136],{"type":52,"tag":193,"props":2137,"children":2138},{"style":200},[2139],{"type":57,"value":2140},"\u002F\u002F verify email\n",{"type":52,"tag":193,"props":2142,"children":2143},{"class":195,"line":401},[2144,2148,2152,2157,2161,2165,2169,2173,2177,2181,2185,2189,2193,2197],{"type":52,"tag":193,"props":2145,"children":2146},{"style":222},[2147],{"type":57,"value":1976},{"type":52,"tag":193,"props":2149,"children":2150},{"style":216},[2151],{"type":57,"value":119},{"type":52,"tag":193,"props":2153,"children":2154},{"style":322},[2155],{"type":57,"value":2156},"verifyEmail",{"type":52,"tag":193,"props":2158,"children":2159},{"style":222},[2160],{"type":57,"value":2076},{"type":52,"tag":193,"props":2162,"children":2163},{"style":216},[2164],{"type":57,"value":725},{"type":52,"tag":193,"props":2166,"children":2167},{"style":216},[2168],{"type":57,"value":1757},{"type":52,"tag":193,"props":2170,"children":2171},{"style":717},[2172],{"type":57,"value":1735},{"type":52,"tag":193,"props":2174,"children":2175},{"style":216},[2176],{"type":57,"value":412},{"type":52,"tag":193,"props":2178,"children":2179},{"style":338},[2180],{"type":57,"value":341},{"type":52,"tag":193,"props":2182,"children":2183},{"style":216},[2184],{"type":57,"value":219},{"type":52,"tag":193,"props":2186,"children":2187},{"style":216},[2188],{"type":57,"value":2028},{"type":52,"tag":193,"props":2190,"children":2191},{"style":216},[2192],{"type":57,"value":230},{"type":52,"tag":193,"props":2194,"children":2195},{"style":222},[2196],{"type":57,"value":412},{"type":52,"tag":193,"props":2198,"children":2199},{"style":216},[2200],{"type":57,"value":256},{"type":52,"tag":60,"props":2202,"children":2203},{},[2204],{"type":57,"value":2205},"Customize the URL pattern that lands in the email:",{"type":52,"tag":182,"props":2207,"children":2209},{"className":184,"code":2208,"language":186,"meta":187,"style":187},"Accounts.urls.resetPassword = (token) =>\n  Meteor.absoluteUrl(`reset\u002F${token}`);\nAccounts.urls.verifyEmail = (token) =>\n  Meteor.absoluteUrl(`verify\u002F${token}`);\n",[2210],{"type":52,"tag":64,"props":2211,"children":2212},{"__ignoreMap":187},[2213,2259,2312,2355],{"type":52,"tag":193,"props":2214,"children":2215},{"class":195,"line":196},[2216,2220,2224,2229,2233,2237,2241,2245,2250,2254],{"type":52,"tag":193,"props":2217,"children":2218},{"style":222},[2219],{"type":57,"value":1976},{"type":52,"tag":193,"props":2221,"children":2222},{"style":216},[2223],{"type":57,"value":119},{"type":52,"tag":193,"props":2225,"children":2226},{"style":222},[2227],{"type":57,"value":2228},"urls",{"type":52,"tag":193,"props":2230,"children":2231},{"style":216},[2232],{"type":57,"value":119},{"type":52,"tag":193,"props":2234,"children":2235},{"style":322},[2236],{"type":57,"value":2071},{"type":52,"tag":193,"props":2238,"children":2239},{"style":216},[2240],{"type":57,"value":455},{"type":52,"tag":193,"props":2242,"children":2243},{"style":216},[2244],{"type":57,"value":1757},{"type":52,"tag":193,"props":2246,"children":2247},{"style":717},[2248],{"type":57,"value":2249},"token",{"type":52,"tag":193,"props":2251,"children":2252},{"style":216},[2253],{"type":57,"value":412},{"type":52,"tag":193,"props":2255,"children":2256},{"style":338},[2257],{"type":57,"value":2258}," =>\n",{"type":52,"tag":193,"props":2260,"children":2261},{"class":195,"line":206},[2262,2267,2271,2276,2280,2285,2290,2295,2299,2304,2308],{"type":52,"tag":193,"props":2263,"children":2264},{"style":222},[2265],{"type":57,"value":2266},"  Meteor",{"type":52,"tag":193,"props":2268,"children":2269},{"style":216},[2270],{"type":57,"value":119},{"type":52,"tag":193,"props":2272,"children":2273},{"style":322},[2274],{"type":57,"value":2275},"absoluteUrl",{"type":52,"tag":193,"props":2277,"children":2278},{"style":222},[2279],{"type":57,"value":330},{"type":52,"tag":193,"props":2281,"children":2282},{"style":216},[2283],{"type":57,"value":2284},"`",{"type":52,"tag":193,"props":2286,"children":2287},{"style":243},[2288],{"type":57,"value":2289},"reset\u002F",{"type":52,"tag":193,"props":2291,"children":2292},{"style":216},[2293],{"type":57,"value":2294},"${",{"type":52,"tag":193,"props":2296,"children":2297},{"style":222},[2298],{"type":57,"value":2249},{"type":52,"tag":193,"props":2300,"children":2301},{"style":216},[2302],{"type":57,"value":2303},"}`",{"type":52,"tag":193,"props":2305,"children":2306},{"style":222},[2307],{"type":57,"value":412},{"type":52,"tag":193,"props":2309,"children":2310},{"style":216},[2311],{"type":57,"value":256},{"type":52,"tag":193,"props":2313,"children":2314},{"class":195,"line":259},[2315,2319,2323,2327,2331,2335,2339,2343,2347,2351],{"type":52,"tag":193,"props":2316,"children":2317},{"style":222},[2318],{"type":57,"value":1976},{"type":52,"tag":193,"props":2320,"children":2321},{"style":216},[2322],{"type":57,"value":119},{"type":52,"tag":193,"props":2324,"children":2325},{"style":222},[2326],{"type":57,"value":2228},{"type":52,"tag":193,"props":2328,"children":2329},{"style":216},[2330],{"type":57,"value":119},{"type":52,"tag":193,"props":2332,"children":2333},{"style":322},[2334],{"type":57,"value":2156},{"type":52,"tag":193,"props":2336,"children":2337},{"style":216},[2338],{"type":57,"value":455},{"type":52,"tag":193,"props":2340,"children":2341},{"style":216},[2342],{"type":57,"value":1757},{"type":52,"tag":193,"props":2344,"children":2345},{"style":717},[2346],{"type":57,"value":2249},{"type":52,"tag":193,"props":2348,"children":2349},{"style":216},[2350],{"type":57,"value":412},{"type":52,"tag":193,"props":2352,"children":2353},{"style":338},[2354],{"type":57,"value":2258},{"type":52,"tag":193,"props":2356,"children":2357},{"class":195,"line":23},[2358,2362,2366,2370,2374,2378,2383,2387,2391,2395,2399],{"type":52,"tag":193,"props":2359,"children":2360},{"style":222},[2361],{"type":57,"value":2266},{"type":52,"tag":193,"props":2363,"children":2364},{"style":216},[2365],{"type":57,"value":119},{"type":52,"tag":193,"props":2367,"children":2368},{"style":322},[2369],{"type":57,"value":2275},{"type":52,"tag":193,"props":2371,"children":2372},{"style":222},[2373],{"type":57,"value":330},{"type":52,"tag":193,"props":2375,"children":2376},{"style":216},[2377],{"type":57,"value":2284},{"type":52,"tag":193,"props":2379,"children":2380},{"style":243},[2381],{"type":57,"value":2382},"verify\u002F",{"type":52,"tag":193,"props":2384,"children":2385},{"style":216},[2386],{"type":57,"value":2294},{"type":52,"tag":193,"props":2388,"children":2389},{"style":222},[2390],{"type":57,"value":2249},{"type":52,"tag":193,"props":2392,"children":2393},{"style":216},[2394],{"type":57,"value":2303},{"type":52,"tag":193,"props":2396,"children":2397},{"style":222},[2398],{"type":57,"value":412},{"type":52,"tag":193,"props":2400,"children":2401},{"style":216},[2402],{"type":57,"value":256},{"type":52,"tag":60,"props":2404,"children":2405},{},[2406],{"type":57,"value":2407},"Both setters accept async functions too (Meteor 3.x).",{"type":52,"tag":60,"props":2409,"children":2410},{},[2411],{"type":57,"value":2412},"Customize the message:",{"type":52,"tag":182,"props":2414,"children":2416},{"className":184,"code":2415,"language":186,"meta":187,"style":187},"Accounts.emailTemplates.resetPassword.subject = () => \"Reset your password\";\nAccounts.emailTemplates.resetPassword.text = (user, url) =>\n  `Reset link: ${url}`;\n",[2417],{"type":52,"tag":64,"props":2418,"children":2419},{"__ignoreMap":187},[2420,2482,2543],{"type":52,"tag":193,"props":2421,"children":2422},{"class":195,"line":196},[2423,2427,2431,2435,2439,2443,2447,2452,2456,2461,2465,2469,2474,2478],{"type":52,"tag":193,"props":2424,"children":2425},{"style":222},[2426],{"type":57,"value":1976},{"type":52,"tag":193,"props":2428,"children":2429},{"style":216},[2430],{"type":57,"value":119},{"type":52,"tag":193,"props":2432,"children":2433},{"style":222},[2434],{"type":57,"value":441},{"type":52,"tag":193,"props":2436,"children":2437},{"style":216},[2438],{"type":57,"value":119},{"type":52,"tag":193,"props":2440,"children":2441},{"style":222},[2442],{"type":57,"value":2071},{"type":52,"tag":193,"props":2444,"children":2445},{"style":216},[2446],{"type":57,"value":119},{"type":52,"tag":193,"props":2448,"children":2449},{"style":322},[2450],{"type":57,"value":2451},"subject",{"type":52,"tag":193,"props":2453,"children":2454},{"style":216},[2455],{"type":57,"value":455},{"type":52,"tag":193,"props":2457,"children":2458},{"style":216},[2459],{"type":57,"value":2460}," ()",{"type":52,"tag":193,"props":2462,"children":2463},{"style":338},[2464],{"type":57,"value":341},{"type":52,"tag":193,"props":2466,"children":2467},{"style":216},[2468],{"type":57,"value":240},{"type":52,"tag":193,"props":2470,"children":2471},{"style":243},[2472],{"type":57,"value":2473},"Reset your password",{"type":52,"tag":193,"props":2475,"children":2476},{"style":216},[2477],{"type":57,"value":251},{"type":52,"tag":193,"props":2479,"children":2480},{"style":216},[2481],{"type":57,"value":256},{"type":52,"tag":193,"props":2483,"children":2484},{"class":195,"line":206},[2485,2489,2493,2497,2501,2505,2509,2513,2517,2521,2526,2530,2535,2539],{"type":52,"tag":193,"props":2486,"children":2487},{"style":222},[2488],{"type":57,"value":1976},{"type":52,"tag":193,"props":2490,"children":2491},{"style":216},[2492],{"type":57,"value":119},{"type":52,"tag":193,"props":2494,"children":2495},{"style":222},[2496],{"type":57,"value":441},{"type":52,"tag":193,"props":2498,"children":2499},{"style":216},[2500],{"type":57,"value":119},{"type":52,"tag":193,"props":2502,"children":2503},{"style":222},[2504],{"type":57,"value":2071},{"type":52,"tag":193,"props":2506,"children":2507},{"style":216},[2508],{"type":57,"value":119},{"type":52,"tag":193,"props":2510,"children":2511},{"style":322},[2512],{"type":57,"value":57},{"type":52,"tag":193,"props":2514,"children":2515},{"style":216},[2516],{"type":57,"value":455},{"type":52,"tag":193,"props":2518,"children":2519},{"style":216},[2520],{"type":57,"value":1757},{"type":52,"tag":193,"props":2522,"children":2523},{"style":717},[2524],{"type":57,"value":2525},"user",{"type":52,"tag":193,"props":2527,"children":2528},{"style":216},[2529],{"type":57,"value":725},{"type":52,"tag":193,"props":2531,"children":2532},{"style":717},[2533],{"type":57,"value":2534}," url",{"type":52,"tag":193,"props":2536,"children":2537},{"style":216},[2538],{"type":57,"value":412},{"type":52,"tag":193,"props":2540,"children":2541},{"style":338},[2542],{"type":57,"value":2258},{"type":52,"tag":193,"props":2544,"children":2545},{"class":195,"line":259},[2546,2551,2556,2560,2565,2569],{"type":52,"tag":193,"props":2547,"children":2548},{"style":216},[2549],{"type":57,"value":2550},"  `",{"type":52,"tag":193,"props":2552,"children":2553},{"style":243},[2554],{"type":57,"value":2555},"Reset link: ",{"type":52,"tag":193,"props":2557,"children":2558},{"style":216},[2559],{"type":57,"value":2294},{"type":52,"tag":193,"props":2561,"children":2562},{"style":222},[2563],{"type":57,"value":2564},"url",{"type":52,"tag":193,"props":2566,"children":2567},{"style":216},[2568],{"type":57,"value":2303},{"type":52,"tag":193,"props":2570,"children":2571},{"style":216},[2572],{"type":57,"value":256},{"type":52,"tag":97,"props":2574,"children":2576},{"id":2575},"passwordless",[2577],{"type":57,"value":2578},"Passwordless",{"type":52,"tag":60,"props":2580,"children":2581},{},[2582,2584,2589],{"type":57,"value":2583},"Add ",{"type":52,"tag":64,"props":2585,"children":2587},{"className":2586},[],[2588],{"type":57,"value":149},{"type":57,"value":2590},". Request a one-time code or link, then submit the\ncode with the same selector:",{"type":52,"tag":182,"props":2592,"children":2594},{"className":184,"code":2593,"language":186,"meta":187,"style":187},"Accounts.requestLoginTokenForUser(\n  {\n    selector: { email },\n    userData: { email },\n    options: { userCreationDisabled: false },\n  },\n  (error) => { if (error) console.error(error); },\n);\n\nMeteor.passwordlessLoginWithToken(\n  { email },\n  token,\n  (error) => { if (error) console.error(error); },\n);\n",[2595],{"type":52,"tag":64,"props":2596,"children":2597},{"__ignoreMap":187},[2598,2618,2625,2649,2673,2707,2714,2785,2796,2803,2823,2838,2850,2921],{"type":52,"tag":193,"props":2599,"children":2600},{"class":195,"line":196},[2601,2605,2609,2614],{"type":52,"tag":193,"props":2602,"children":2603},{"style":222},[2604],{"type":57,"value":1976},{"type":52,"tag":193,"props":2606,"children":2607},{"style":216},[2608],{"type":57,"value":119},{"type":52,"tag":193,"props":2610,"children":2611},{"style":322},[2612],{"type":57,"value":2613},"requestLoginTokenForUser",{"type":52,"tag":193,"props":2615,"children":2616},{"style":222},[2617],{"type":57,"value":1435},{"type":52,"tag":193,"props":2619,"children":2620},{"class":195,"line":206},[2621],{"type":52,"tag":193,"props":2622,"children":2623},{"style":216},[2624],{"type":57,"value":1478},{"type":52,"tag":193,"props":2626,"children":2627},{"class":195,"line":259},[2628,2633,2637,2641,2645],{"type":52,"tag":193,"props":2629,"children":2630},{"style":367},[2631],{"type":57,"value":2632},"    selector",{"type":52,"tag":193,"props":2634,"children":2635},{"style":216},[2636],{"type":57,"value":388},{"type":52,"tag":193,"props":2638,"children":2639},{"style":216},[2640],{"type":57,"value":219},{"type":52,"tag":193,"props":2642,"children":2643},{"style":222},[2644],{"type":57,"value":1998},{"type":52,"tag":193,"props":2646,"children":2647},{"style":216},[2648],{"type":57,"value":1722},{"type":52,"tag":193,"props":2650,"children":2651},{"class":195,"line":23},[2652,2657,2661,2665,2669],{"type":52,"tag":193,"props":2653,"children":2654},{"style":367},[2655],{"type":57,"value":2656},"    userData",{"type":52,"tag":193,"props":2658,"children":2659},{"style":216},[2660],{"type":57,"value":388},{"type":52,"tag":193,"props":2662,"children":2663},{"style":216},[2664],{"type":57,"value":219},{"type":52,"tag":193,"props":2666,"children":2667},{"style":222},[2668],{"type":57,"value":1998},{"type":52,"tag":193,"props":2670,"children":2671},{"style":216},[2672],{"type":57,"value":1722},{"type":52,"tag":193,"props":2674,"children":2675},{"class":195,"line":310},[2676,2681,2685,2689,2694,2698,2703],{"type":52,"tag":193,"props":2677,"children":2678},{"style":367},[2679],{"type":57,"value":2680},"    options",{"type":52,"tag":193,"props":2682,"children":2683},{"style":216},[2684],{"type":57,"value":388},{"type":52,"tag":193,"props":2686,"children":2687},{"style":216},[2688],{"type":57,"value":219},{"type":52,"tag":193,"props":2690,"children":2691},{"style":367},[2692],{"type":57,"value":2693}," userCreationDisabled",{"type":52,"tag":193,"props":2695,"children":2696},{"style":216},[2697],{"type":57,"value":388},{"type":52,"tag":193,"props":2699,"children":2700},{"style":391},[2701],{"type":57,"value":2702}," false",{"type":52,"tag":193,"props":2704,"children":2705},{"style":216},[2706],{"type":57,"value":1470},{"type":52,"tag":193,"props":2708,"children":2709},{"class":195,"line":349},[2710],{"type":52,"tag":193,"props":2711,"children":2712},{"style":216},[2713],{"type":57,"value":1615},{"type":52,"tag":193,"props":2715,"children":2716},{"class":195,"line":377},[2717,2721,2725,2729,2733,2737,2741,2745,2749,2753,2757,2761,2765,2769,2773,2777,2781],{"type":52,"tag":193,"props":2718,"children":2719},{"style":216},[2720],{"type":57,"value":1730},{"type":52,"tag":193,"props":2722,"children":2723},{"style":717},[2724],{"type":57,"value":1780},{"type":52,"tag":193,"props":2726,"children":2727},{"style":216},[2728],{"type":57,"value":412},{"type":52,"tag":193,"props":2730,"children":2731},{"style":338},[2732],{"type":57,"value":341},{"type":52,"tag":193,"props":2734,"children":2735},{"style":216},[2736],{"type":57,"value":219},{"type":52,"tag":193,"props":2738,"children":2739},{"style":210},[2740],{"type":57,"value":1752},{"type":52,"tag":193,"props":2742,"children":2743},{"style":367},[2744],{"type":57,"value":1757},{"type":52,"tag":193,"props":2746,"children":2747},{"style":222},[2748],{"type":57,"value":1780},{"type":52,"tag":193,"props":2750,"children":2751},{"style":367},[2752],{"type":57,"value":1766},{"type":52,"tag":193,"props":2754,"children":2755},{"style":222},[2756],{"type":57,"value":1771},{"type":52,"tag":193,"props":2758,"children":2759},{"style":216},[2760],{"type":57,"value":119},{"type":52,"tag":193,"props":2762,"children":2763},{"style":322},[2764],{"type":57,"value":1780},{"type":52,"tag":193,"props":2766,"children":2767},{"style":367},[2768],{"type":57,"value":330},{"type":52,"tag":193,"props":2770,"children":2771},{"style":222},[2772],{"type":57,"value":1780},{"type":52,"tag":193,"props":2774,"children":2775},{"style":367},[2776],{"type":57,"value":412},{"type":52,"tag":193,"props":2778,"children":2779},{"style":216},[2780],{"type":57,"value":1797},{"type":52,"tag":193,"props":2782,"children":2783},{"style":216},[2784],{"type":57,"value":1470},{"type":52,"tag":193,"props":2786,"children":2787},{"class":195,"line":401},[2788,2792],{"type":52,"tag":193,"props":2789,"children":2790},{"style":222},[2791],{"type":57,"value":412},{"type":52,"tag":193,"props":2793,"children":2794},{"style":216},[2795],{"type":57,"value":256},{"type":52,"tag":193,"props":2797,"children":2798},{"class":195,"line":419},[2799],{"type":52,"tag":193,"props":2800,"children":2801},{"emptyLinePlaceholder":304},[2802],{"type":57,"value":307},{"type":52,"tag":193,"props":2804,"children":2805},{"class":195,"line":427},[2806,2810,2814,2819],{"type":52,"tag":193,"props":2807,"children":2808},{"style":222},[2809],{"type":57,"value":9},{"type":52,"tag":193,"props":2811,"children":2812},{"style":216},[2813],{"type":57,"value":119},{"type":52,"tag":193,"props":2815,"children":2816},{"style":322},[2817],{"type":57,"value":2818},"passwordlessLoginWithToken",{"type":52,"tag":193,"props":2820,"children":2821},{"style":222},[2822],{"type":57,"value":1435},{"type":52,"tag":193,"props":2824,"children":2825},{"class":195,"line":475},[2826,2830,2834],{"type":52,"tag":193,"props":2827,"children":2828},{"style":216},[2829],{"type":57,"value":1443},{"type":52,"tag":193,"props":2831,"children":2832},{"style":222},[2833],{"type":57,"value":1998},{"type":52,"tag":193,"props":2835,"children":2836},{"style":216},[2837],{"type":57,"value":1722},{"type":52,"tag":193,"props":2839,"children":2840},{"class":195,"line":521},[2841,2846],{"type":52,"tag":193,"props":2842,"children":2843},{"style":222},[2844],{"type":57,"value":2845},"  token",{"type":52,"tag":193,"props":2847,"children":2848},{"style":216},[2849],{"type":57,"value":79},{"type":52,"tag":193,"props":2851,"children":2852},{"class":195,"line":1618},[2853,2857,2861,2865,2869,2873,2877,2881,2885,2889,2893,2897,2901,2905,2909,2913,2917],{"type":52,"tag":193,"props":2854,"children":2855},{"style":216},[2856],{"type":57,"value":1730},{"type":52,"tag":193,"props":2858,"children":2859},{"style":717},[2860],{"type":57,"value":1780},{"type":52,"tag":193,"props":2862,"children":2863},{"style":216},[2864],{"type":57,"value":412},{"type":52,"tag":193,"props":2866,"children":2867},{"style":338},[2868],{"type":57,"value":341},{"type":52,"tag":193,"props":2870,"children":2871},{"style":216},[2872],{"type":57,"value":219},{"type":52,"tag":193,"props":2874,"children":2875},{"style":210},[2876],{"type":57,"value":1752},{"type":52,"tag":193,"props":2878,"children":2879},{"style":367},[2880],{"type":57,"value":1757},{"type":52,"tag":193,"props":2882,"children":2883},{"style":222},[2884],{"type":57,"value":1780},{"type":52,"tag":193,"props":2886,"children":2887},{"style":367},[2888],{"type":57,"value":1766},{"type":52,"tag":193,"props":2890,"children":2891},{"style":222},[2892],{"type":57,"value":1771},{"type":52,"tag":193,"props":2894,"children":2895},{"style":216},[2896],{"type":57,"value":119},{"type":52,"tag":193,"props":2898,"children":2899},{"style":322},[2900],{"type":57,"value":1780},{"type":52,"tag":193,"props":2902,"children":2903},{"style":367},[2904],{"type":57,"value":330},{"type":52,"tag":193,"props":2906,"children":2907},{"style":222},[2908],{"type":57,"value":1780},{"type":52,"tag":193,"props":2910,"children":2911},{"style":367},[2912],{"type":57,"value":412},{"type":52,"tag":193,"props":2914,"children":2915},{"style":216},[2916],{"type":57,"value":1797},{"type":52,"tag":193,"props":2918,"children":2919},{"style":216},[2920],{"type":57,"value":1470},{"type":52,"tag":193,"props":2922,"children":2924},{"class":195,"line":2923},14,[2925,2929],{"type":52,"tag":193,"props":2926,"children":2927},{"style":222},[2928],{"type":57,"value":412},{"type":52,"tag":193,"props":2930,"children":2931},{"style":216},[2932],{"type":57,"value":256},{"type":52,"tag":60,"props":2934,"children":2935},{},[2936,2938,2944,2946,2952,2953,2959,2961,2967],{"type":57,"value":2937},"Set ",{"type":52,"tag":64,"props":2939,"children":2941},{"className":2940},[],[2942],{"type":57,"value":2943},"userCreationDisabled: true",{"type":57,"value":2945}," for sign-in-only flows. Configure\n",{"type":52,"tag":64,"props":2947,"children":2949},{"className":2948},[],[2950],{"type":57,"value":2951},"tokenSequenceLength",{"type":57,"value":1854},{"type":52,"tag":64,"props":2954,"children":2956},{"className":2955},[],[2957],{"type":57,"value":2958},"loginTokenExpirationHours",{"type":57,"value":2960},", and the\n",{"type":52,"tag":64,"props":2962,"children":2964},{"className":2963},[],[2965],{"type":57,"value":2966},"Accounts.emailTemplates.sendLoginToken",{"type":57,"value":2968}," template on the server. Treat the\ntoken-request method as an abuse-sensitive endpoint and rate-limit repeated\nrequests.",{"type":52,"tag":97,"props":2970,"children":2972},{"id":2971},"_2fa",[2973],{"type":57,"value":2974},"2FA",{"type":52,"tag":60,"props":2976,"children":2977},{},[2978,2983],{"type":52,"tag":64,"props":2979,"children":2981},{"className":2980},[],[2982],{"type":57,"value":161},{"type":57,"value":2984}," adds TOTP. The login flow:",{"type":52,"tag":104,"props":2986,"children":2987},{},[2988,3008,3020],{"type":52,"tag":108,"props":2989,"children":2990},{},[2991,2993,2999,3001,3006],{"type":57,"value":2992},"Client calls ",{"type":52,"tag":64,"props":2994,"children":2996},{"className":2995},[],[2997],{"type":57,"value":2998},"Meteor.loginWithPasswordAsync(user, password)",{"type":57,"value":3000}," on Meteor\n3.5+, or the callback form of ",{"type":52,"tag":64,"props":3002,"children":3004},{"className":3003},[],[3005],{"type":57,"value":927},{"type":57,"value":3007}," on older 3.x.",{"type":52,"tag":108,"props":3009,"children":3010},{},[3011,3013,3019],{"type":57,"value":3012},"Server rejects with ",{"type":52,"tag":64,"props":3014,"children":3016},{"className":3015},[],[3017],{"type":57,"value":3018},"error.error === 'no-2fa-code'",{"type":57,"value":119},{"type":52,"tag":108,"props":3021,"children":3022},{},[3023,3025,3031],{"type":57,"value":3024},"Client prompts for a code, retries with\n",{"type":52,"tag":64,"props":3026,"children":3028},{"className":3027},[],[3029],{"type":57,"value":3030},"Meteor.loginWithPasswordAnd2faCode(user, password, code, cb)",{"type":57,"value":119},{"type":52,"tag":97,"props":3033,"children":3035},{"id":3034},"anti-patterns",[3036],{"type":57,"value":3037},"Anti-patterns",{"type":52,"tag":3039,"props":3040,"children":3041},"ul",{},[3042,3069,3081,3094],{"type":52,"tag":108,"props":3043,"children":3044},{},[3045,3047,3053,3055,3060,3062,3068],{"type":57,"value":3046},"Store the OAuth secret in ",{"type":52,"tag":64,"props":3048,"children":3050},{"className":3049},[],[3051],{"type":57,"value":3052},"Meteor.settings.public",{"type":57,"value":3054},". The client sees\n",{"type":52,"tag":64,"props":3056,"children":3058},{"className":3057},[],[3059],{"type":57,"value":1145},{"type":57,"value":3061},". Put secrets at the top level of ",{"type":52,"tag":64,"props":3063,"children":3065},{"className":3064},[],[3066],{"type":57,"value":3067},"settings.json",{"type":57,"value":119},{"type":52,"tag":108,"props":3070,"children":3071},{},[3072,3074,3079],{"type":57,"value":3073},"Build a custom password hash. ",{"type":52,"tag":64,"props":3075,"children":3077},{"className":3076},[],[3078],{"type":57,"value":77},{"type":57,"value":3080}," uses bcrypt; trust it.",{"type":52,"tag":108,"props":3082,"children":3083},{},[3084,3086,3092],{"type":57,"value":3085},"Bypass ",{"type":52,"tag":64,"props":3087,"children":3089},{"className":3088},[],[3090],{"type":57,"value":3091},"forbidClientAccountCreation",{"type":57,"value":3093}," with a method that takes a\npassword. Same risk.",{"type":52,"tag":108,"props":3095,"children":3096},{},[3097,3099,3105,3107,3113],{"type":57,"value":3098},"Run ",{"type":52,"tag":64,"props":3100,"children":3102},{"className":3101},[],[3103],{"type":57,"value":3104},"Accounts.config({ ... })",{"type":57,"value":3106}," inside a deferred path. Call it at top\nlevel or in ",{"type":52,"tag":64,"props":3108,"children":3110},{"className":3109},[],[3111],{"type":57,"value":3112},"Meteor.startup",{"type":57,"value":119},{"type":52,"tag":97,"props":3115,"children":3117},{"id":3116},"see-also",[3118],{"type":57,"value":3119},"See also",{"type":52,"tag":3039,"props":3121,"children":3122},{},[3123,3132,3141,3150],{"type":52,"tag":108,"props":3124,"children":3125},{},[3126],{"type":52,"tag":64,"props":3127,"children":3129},{"className":3128},[],[3130],{"type":57,"value":3131},"references\u002Fpassword-flows.md",{"type":52,"tag":108,"props":3133,"children":3134},{},[3135],{"type":52,"tag":64,"props":3136,"children":3138},{"className":3137},[],[3139],{"type":57,"value":3140},"references\u002Foauth-services.md",{"type":52,"tag":108,"props":3142,"children":3143},{},[3144],{"type":52,"tag":64,"props":3145,"children":3147},{"className":3146},[],[3148],{"type":57,"value":3149},"references\u002Feval-cases.md",{"type":52,"tag":108,"props":3151,"children":3152},{},[3153,3155,3160],{"type":57,"value":3154},"For OAuth-secret encryption and CSP, see the ",{"type":52,"tag":64,"props":3156,"children":3158},{"className":3157},[],[3159],{"type":57,"value":1947},{"type":57,"value":3161}," skill.",{"type":52,"tag":3163,"props":3164,"children":3165},"style",{},[3166],{"type":57,"value":3167},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3169,"total":2923},[3170,3177,3191,3202,3216,3233,3247,3261,3276,3288,3301,3315],{"slug":4,"name":4,"fn":5,"description":6,"org":3171,"tags":3172,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3173,3174,3175,3176],{"name":13,"slug":14,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"slug":3178,"name":3178,"fn":3179,"description":3180,"org":3181,"tags":3182,"stars":23,"repoUrl":24,"updatedAt":3190},"meteor-blaze","build and debug Meteor Blaze interfaces","Use when building or debugging Blaze interfaces in Meteor 3: meteor create --blaze, Spacebars templates, Template helpers and events, lifecycle hooks, Tracker, ReactiveVar or ReactiveDict, template subscriptions, Promise helpers, #let async states, Template.dynamic, Blaze.render, and blaze-hot HMR with the Meteor bundler. Triggers on stale async helper results, lost reactivity after await, data-context lookup surprises, duplicate DOM integrations after HMR, Rspack full reloads, or raw HTML in triple braces. Use this skill when the user asks about reusable Blaze components, current Blaze packages, Rspack entry imports, or testing Blaze templates. For Meteor 2 to 3 upgrades, use migrate-to-meteor-3 instead.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3183,3186,3187],{"name":3184,"slug":3185,"type":15},"Frontend","frontend",{"name":9,"slug":8,"type":15},{"name":3188,"slug":3189,"type":15},"Web Development","web-development","2026-08-28T15:09:37.601349",{"slug":3192,"name":3192,"fn":3193,"description":3194,"org":3195,"tags":3196,"stars":23,"repoUrl":24,"updatedAt":3201},"meteor-community-packages","manage Meteor community packages","Use when choosing, evaluating, adopting, configuring, or debugging a package from Meteor's documented community catalog, or moving from a community package to a promoted core package such as roles. Triggers on community package recommendations, Atmosphere vs npm selection, Packosphere maintenance checks, jam:* helpers, Meteor.publish.once, Meteor.publish.stream, meteor-rpc, Wormhole, cluster, and mail-preview. Use this skill when the user asks which maintained package fits or how its documented integration works. Route Meteor 2-to-3 package failures to migrate-to-meteor-3 and underlying core API design to its owning skill.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3197,3200],{"name":3198,"slug":3199,"type":15},"Engineering","engineering",{"name":9,"slug":8,"type":15},"2026-08-28T15:08:45.28079",{"slug":3203,"name":3203,"fn":3204,"description":3205,"org":3206,"tags":3207,"stars":23,"repoUrl":24,"updatedAt":3215},"meteor-debugging","diagnose failures in Meteor 3 applications","Use when diagnosing an unexplained failure in a Meteor 3 application before the failing layer or fix is known. Triggers on server crashes, client-only errors, stuck subscriptions, DDP or WebSocket disconnects, Minimongo\u002Fserver data mismatches, hanging or flaky tests, slow builds, --inspect, console.log, .only, Playwright traces, or requests to debug a Meteor app. Use this skill when evidence must distinguish Meteor tool, server, client, data, test, browser, mobile, or production boundaries. For test setup and authoring use meteor-testing; after confirming a domain cause, hand the repair to the owning skill.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3208,3211,3212],{"name":3209,"slug":3210,"type":15},"Debugging","debugging",{"name":9,"slug":8,"type":15},{"name":3213,"slug":3214,"type":15},"WebSockets","websockets","2026-08-28T15:08:40.430401",{"slug":3217,"name":3217,"fn":3218,"description":3219,"org":3220,"tags":3221,"stars":23,"repoUrl":24,"updatedAt":3232},"meteor-deployment","deploy Meteor 3 applications","Use when deploying a Meteor 3 application. Triggers on meteor build, meteor deploy, Galaxy Push to Deploy, Galaxy Mode, Repository Mode, DEPLOY_HOSTNAME, Docker, Kubernetes, settings.json, METEOR_SETTINGS, MONGO_URL, MONGO_OPLOG_URL, ROOT_URL, PORT, HTTP_FORWARDED_COUNT, NODE_OPTIONS, health checks, pre-deploy commands, hot code push, --architecture os.linux.x86_64, --server-only, or a deployed Node.js version mismatch. Use this skill when the user asks about shipping the app, asks about production config, or asks about containerizing.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3222,3225,3228,3231],{"name":3223,"slug":3224,"type":15},"Deployment","deployment",{"name":3226,"slug":3227,"type":15},"Docker","docker",{"name":3229,"slug":3230,"type":15},"Kubernetes","kubernetes",{"name":9,"slug":8,"type":15},"2026-08-28T15:08:44.881769",{"slug":3234,"name":3234,"fn":3235,"description":3236,"org":3237,"tags":3238,"stars":23,"repoUrl":24,"updatedAt":3246},"meteor-methods","author and debug Meteor methods","Use when authoring or debugging Meteor methods (Meteor.methods, Meteor.call, Meteor.callAsync). Triggers on argument validation with check(), optimistic UI stubs, latency compensation, Meteor.Error handling, and DDPRateLimiter. Use this skill when the user asks about server-side mutation, asks about rate limiting RPC, or asks about wrapping a method with auth checks.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3239,3242,3245],{"name":3240,"slug":3241,"type":15},"API Development","api-development",{"name":3243,"slug":3244,"type":15},"Backend","backend",{"name":9,"slug":8,"type":15},"2026-08-28T15:09:38.691128",{"slug":3248,"name":3248,"fn":3249,"description":3250,"org":3251,"tags":3252,"stars":23,"repoUrl":24,"updatedAt":3260},"meteor-modern-build-stack","configure Meteor 3 modern build stacks","Use when configuring or tuning the Meteor 3 modern build stack: SWC transpiler, SWC-based minifier, modern @parcel\u002Fwatcher, web-arch skipping in development, .meteorignore, and the Rspack bundler integration via the rspack Atmosphere package. Triggers on package.json \"meteor\": { \"modern\": true }, .swcrc, swc.config.js, [Transpiler] Used Babel Fallback logs, rspack.config.js, rspack.config.ts, defineConfig from @meteorjs\u002Frspack, Meteor.compileWith* helpers, Meteor.extendConfig, Meteor.extendSwcConfig vs Meteor.replaceSwcConfig, Meteor.splitVendorChunk, Meteor.persistDevFiles, Meteor.disablePlugins, Meteor.enablePortableBuild, HtmlRspackPlugin customization, RSPACK_DEVSERVER_PORT, TOOL_NODE_FLAGS for OOM, modern\u002Flegacy archs. Use this skill when the user asks about enabling the modern build stack, asks about SWC vs Babel in Meteor, asks about Rspack integration setup, or asks about customizing rspack.config.js. For converting an existing app's code to be Rspack-compatible, use migrate-to-rspack instead.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3253,3256,3257],{"name":3254,"slug":3255,"type":15},"Build","build",{"name":9,"slug":8,"type":15},{"name":3258,"slug":3259,"type":15},"Performance","performance","2026-08-28T15:09:42.877439",{"slug":3262,"name":3262,"fn":3263,"description":3264,"org":3265,"tags":3266,"stars":23,"repoUrl":24,"updatedAt":3275},"meteor-mongo-minimongo","author and debug Meteor MongoDB queries","Use when authoring or debugging Mongo queries in Meteor 3. Triggers on Mongo.Collection, find\u002FfindOne, server async vs client Minimongo sync, oplog vs change streams, indexes, selectors, modifiers, projections. Use this skill when the user asks about Mongo on the server or asks about Minimongo on the client.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3267,3270,3271,3272],{"name":3268,"slug":3269,"type":15},"Database","database",{"name":3209,"slug":3210,"type":15},{"name":9,"slug":8,"type":15},{"name":3273,"slug":3274,"type":15},"MongoDB","mongodb","2026-08-28T15:08:44.473981",{"slug":3277,"name":3277,"fn":3278,"description":3279,"org":3280,"tags":3281,"stars":23,"repoUrl":24,"updatedAt":3287},"meteor-pubsub","author and debug Meteor publications","Use when authoring or debugging Meteor publications and subscriptions (Meteor.publish, Meteor.subscribe). Triggers on publication strategies (SERVER_MERGE, NO_MERGE, NO_MERGE_NO_HISTORY), the low-level publish API (added\u002Fchanged\u002Fremoved), cursor authorization, reactive joins, leaked documents. Use this skill when the user asks about pub\u002Fsub or asks about reactive data fetching.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3282,3283,3284],{"name":3243,"slug":3244,"type":15},{"name":9,"slug":8,"type":15},{"name":3285,"slug":3286,"type":15},"Real-time","real-time","2026-08-28T15:09:37.97396",{"slug":3289,"name":3289,"fn":3290,"description":3291,"org":3292,"tags":3293,"stars":23,"repoUrl":24,"updatedAt":3300},"meteor-react","build and debug Meteor React interfaces","Use when building or debugging React interfaces in Meteor 3: meteor create --react, createRoot, JSX or TSX entry points, Rspack React detection, Fast Refresh, react-meteor-data, useTracker, useSubscribe, useFind, withTracker, Suspense, and Tracker.withComputation. Triggers on isLoading being treated as a boolean, useFind receiving fetch(), stale closure inputs, duplicate tracker side effects, unstable Suspense keys, lost reactivity after await, state reset after refresh, or React tests leaking computations. Use this skill when the user asks about a React skeleton, React-specific rspack.config rules, reactive data hooks, or classic versus Suspense integration. Route general bundler configuration to meteor-modern-build-stack and Meteor 2 upgrades to migrate-to-meteor-3.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3294,3295,3296,3299],{"name":3184,"slug":3185,"type":15},{"name":9,"slug":8,"type":15},{"name":3297,"slug":3298,"type":15},"React","react",{"name":3188,"slug":3189,"type":15},"2026-08-28T15:09:37.193947",{"slug":1947,"name":1947,"fn":3302,"description":3303,"org":3304,"tags":3305,"stars":23,"repoUrl":24,"updatedAt":3314},"audit and harden Meteor 3 applications","Use when auditing or hardening a Meteor 3 application. Triggers on missing check() on method arguments, missing this.userId guards on publications, browser-policy CSP, DDPRateLimiter rules, oauth-encryption via Accounts.config oauthSecretKey, audit-argument-checks, allow\u002Fdeny legacy patterns, BrowserPolicy.content.disallowInlineScripts, BrowserPolicy.framing.disallow. Use this skill when the user asks about hardening, asks about a security review, or asks about CSP for a third-party script (Stripe, Google Maps, fonts).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3306,3307,3310,3311],{"name":13,"slug":14,"type":15},{"name":3308,"slug":3309,"type":15},"Code Analysis","code-analysis",{"name":9,"slug":8,"type":15},{"name":3312,"slug":3313,"type":15},"Security","security","2026-08-28T15:09:32.604319",{"slug":3316,"name":3316,"fn":3317,"description":3318,"org":3319,"tags":3320,"stars":23,"repoUrl":24,"updatedAt":3328},"meteor-testing","write and repair Meteor test harnesses","Use when setting up, designing, writing, or repairing tests and test harnesses in a Meteor 3 app. Triggers on meteortesting:mocha, --driver-package, TEST_WATCH, TEST_BROWSER_DRIVER, MOCHA_GREP, meteor.testModule, focused tests, .only, Meteor.server.method_handlers, Meteor.server.publish_handlers, DDP.connect, --full-app integration mode, sinon, async test signatures, Playwright\u002FCypress E2E. Use this skill when the user asks about test runners, asks about testing publications, or asks about Jest vs Mocha in Meteor. For a failing, hanging, or flaky test whose failing layer or root cause is unknown, use meteor-debugging before changing the test or app.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3321,3322,3325],{"name":9,"slug":8,"type":15},{"name":3323,"slug":3324,"type":15},"QA","qa",{"name":3326,"slug":3327,"type":15},"Testing","testing","2026-08-28T15:09:38.330724",{"items":3330,"total":2923},[3331,3338,3344,3349,3355,3362,3368],{"slug":4,"name":4,"fn":5,"description":6,"org":3332,"tags":3333,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3334,3335,3336,3337],{"name":13,"slug":14,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"slug":3178,"name":3178,"fn":3179,"description":3180,"org":3339,"tags":3340,"stars":23,"repoUrl":24,"updatedAt":3190},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3341,3342,3343],{"name":3184,"slug":3185,"type":15},{"name":9,"slug":8,"type":15},{"name":3188,"slug":3189,"type":15},{"slug":3192,"name":3192,"fn":3193,"description":3194,"org":3345,"tags":3346,"stars":23,"repoUrl":24,"updatedAt":3201},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3347,3348],{"name":3198,"slug":3199,"type":15},{"name":9,"slug":8,"type":15},{"slug":3203,"name":3203,"fn":3204,"description":3205,"org":3350,"tags":3351,"stars":23,"repoUrl":24,"updatedAt":3215},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3352,3353,3354],{"name":3209,"slug":3210,"type":15},{"name":9,"slug":8,"type":15},{"name":3213,"slug":3214,"type":15},{"slug":3217,"name":3217,"fn":3218,"description":3219,"org":3356,"tags":3357,"stars":23,"repoUrl":24,"updatedAt":3232},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3358,3359,3360,3361],{"name":3223,"slug":3224,"type":15},{"name":3226,"slug":3227,"type":15},{"name":3229,"slug":3230,"type":15},{"name":9,"slug":8,"type":15},{"slug":3234,"name":3234,"fn":3235,"description":3236,"org":3363,"tags":3364,"stars":23,"repoUrl":24,"updatedAt":3246},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3365,3366,3367],{"name":3240,"slug":3241,"type":15},{"name":3243,"slug":3244,"type":15},{"name":9,"slug":8,"type":15},{"slug":3248,"name":3248,"fn":3249,"description":3250,"org":3369,"tags":3370,"stars":23,"repoUrl":24,"updatedAt":3260},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3371,3372,3373],{"name":3254,"slug":3255,"type":15},{"name":9,"slug":8,"type":15},{"name":3258,"slug":3259,"type":15}]