跳至内容

账户

Accounts-base

Meteor 账户系统建立在 publishmethods 中的 userId 支持之上。核心包添加了存储在数据库中的用户文档的概念,其他包添加了 安全密码认证与第三方登录服务的集成 以及 预构建的用户界面

基本的账户系统位于 accounts-base 包中,但应用程序通常会通过添加一个登录提供程序包来自动包含它:accounts-passwordaccounts-facebookaccounts-githubaccounts-googleaccounts-meetupaccounts-twitteraccounts-weibo

在 Meteor 指南的 账户 文章中阅读更多关于自定义用户账户的信息。

使用会话存储的账户

默认情况下,Meteor 使用本地存储来存储浏览器会话中的登录令牌等内容。但是,对于某些应用程序,使用会话存储更有意义。您可以通过将以下内容添加到您的设置中来实现此目的

json
{
  // ... all other settings,
  "public": {
    // ... all your public settings
    "packages": {
      "accounts": {
        "clientStorage": "session"
      }
    }
  }
}

Meteor.user

摘要

获取当前用户记录,如果未登录任何用户,则返回 null。一个反应式数据源。

参数

源代码
名称类型描述必需
选项对象

选项

名称类型描述必需
字段MongoFieldSpecifier

要返回或排除的字段的字典。

Meteor.users 集合中检索当前用户的用户记录。

在客户端,可用的字段将是从服务器发布的那些字段(其他字段在客户端不可用)。默认情况下,服务器发布 usernameemailsprofile(用户可写)。有关用户文档中使用的字段的更多信息,请参见 Meteor.users

在服务器上,这将从数据库中获取记录。为了提高使用用户文档多次的方法的延迟,请将返回的记录保存到变量中,而不是重新调用 Meteor.user()

获取完整的用户文档可能会导致服务器上不必要的数据库使用和客户端上的过度反应,尤其是在您在其中存储大量自定义数据时。因此,建议使用 options 参数仅获取您需要的字段

js
import { Meteor } from "meteor/meteor";
const userName = Meteor.user({ fields: { "profile.name": 1 } }).profile.name;

Meteor.userAsync

摘要

获取当前用户记录,如果未登录任何用户,则返回 null。一个反应式数据源。

参数

源代码
名称类型描述必需
选项对象

选项

名称类型描述必需
字段MongoFieldSpecifier

要返回或排除的字段的字典。

Meteor.user 相同,但返回一个 Promise 并在服务器上可用。

js
import { Meteor } from "meteor/meteor";
const user = await Meteor.userAsync();

Meteor.userId

摘要

获取当前用户 ID,如果未登录任何用户,则返回 null。一个反应式数据源。

js
import { Meteor } from "meteor/meteor";


const result = Meteor.userId();

Meteor.users

摘要

包含用户文档的 Mongo.Collection

此集合包含每个注册用户的单个文档。以下是一个用户文档示例

js
{
  _id: 'QwkSmTCZiw5KDx3L6',  // Meteor.userId()
  username: 'cool_kid_13', // Unique name
  emails: [
    // Each email address can only belong to one user.
    { address: '[email protected]', verified: true },
    { address: '[email protected]', verified: false }
  ],
  createdAt: new Date('Wed Aug 21 2013 15:16:52 GMT-0700 (PDT)'),
  profile: {
    // The profile is writable by the user by default.
    name: 'Joe Schmoe'
  },
  services: {
    facebook: {
      id: '709050', // Facebook ID
      accessToken: 'AAACCgdX7G2...AbV9AZDZD'
    },
    resume: {
      loginTokens: [
        { token: '97e8c205-c7e4-47c9-9bea-8e2ccc0694cd',
          when: 1349761684048 }
      ]
    }
  }
}

用户文档可以包含您想要存储的有关用户的任何数据。Meteor 对以下字段进行特殊处理

  • username:标识用户的唯一字符串。
  • emails:一个对象的数组,其键为 addressverified;一个电子邮件地址最多可以属于一个用户。verified 是一个布尔值,如果用户已通过发送到电子邮件的令牌 验证了地址,则为 true。
  • createdAt:创建用户文档的日期。
  • profile:用户可以使用任何数据创建和更新的对象。不要在 profile 上存储任何您不希望用户编辑的内容,除非您在 Meteor.users 集合上设置了拒绝规则。
  • services:一个包含特定登录服务使用的数据的对象。例如,其 reset 字段包含 忘记密码 链接使用的令牌,其 resume 字段包含用于在会话之间保持登录状态的令牌。

与所有 Mongo.Collection 一样,您可以在服务器上访问所有文档,但客户端只能访问服务器专门发布的那些文档。您还可以使用所有集合方法,例如服务器上的 Meteor.users.remove 来删除用户。

默认情况下,当前用户的 usernameemailsprofile 会发布到客户端。您可以使用以下方法发布当前用户的其他字段

js
Meteor.publish("userData", function () {
  if (this.userId) {
    return Meteor.users.find(
      { _id: this.userId },
      {
        fields: { other: 1, things: 1 },
      }
    );
  } else {
    this.ready();
  }
});
js
Meteor.subscribe("userData");

如果安装了 autopublish 包,则系统上所有用户信息都会发布到所有客户端。这包括 usernameprofileservices 中任何旨在公开的字段(例如 services.facebook.idservices.twitter.screenName)。此外,在使用 autopublish 时,会为当前登录的用户发布更多信息,包括访问令牌。这允许直接从客户端进行 API 调用,以供允许此操作的服务使用。

默认情况下,用户可以使用 Accounts.createUser 指定他们自己的 profile 字段,并使用 Meteor.users.update 修改它。要允许用户编辑其他字段,请使用 Meteor.users.allow。要禁止用户对他们的用户文档进行任何修改

js
import { Meteor } from "meteor/meteor";
Meteor.users.deny({ update: () => true });

Meteor.loggingIn

仅限客户端

摘要

如果当前正在进行登录方法(例如 Meteor.loginWithPasswordMeteor.loginWithFacebookAccounts.createUser),则为 true。一个反应式数据源。

js
import { Meteor } from "meteor/meteor";


const result = Meteor.loggingIn();

例如,accounts-ui 使用此功能在处理登录请求时显示动画。

Meteor.loggingOut

仅限客户端

摘要

如果当前正在进行注销方法(例如 Meteor.logout),则为 true。一个反应式数据源。

js
import { Meteor } from "meteor/meteor";


const result = Meteor.loggingOut();

Meteor.logout

仅限客户端

摘要

注销用户。

参数

源代码
名称类型描述必需
回调函数

可选回调。成功时不带任何参数调用,或失败时带单个 Error 参数调用。

js
import { Meteor } from "meteor/meteor";


const result = Meteor.logout();
  () => {}
);

Meteor.logoutOtherClients

仅限客户端

摘要

注销以当前用户身份登录的其他客户端,但不注销调用此函数的客户端。

参数

源代码
名称类型描述必需
回调函数

可选回调。成功时不带任何参数调用,或失败时带单个 Error 参数调用。

js
import { Meteor } from "meteor/meteor";


const result = Meteor.logoutOtherClients();
  () => {}
);

例如,当在用户的浏览器中调用时,该浏览器中的连接将保持登录状态,但任何其他以该用户身份登录的浏览器或 DDP 客户端都将被注销。

Meteor.loginWithPassword

仅限客户端

摘要

使用密码登录用户。

参数

源代码
名称类型描述必需
选择器对象或字符串

可以是解释为用户名或电子邮件的字符串;或者是一个具有单个键的对象:emailusernameid。用户名或电子邮件匹配不区分大小写。

密码字符串

用户的密码。

回调函数

可选回调。成功时不带任何参数调用,或失败时带单个 Error 参数调用。

js
import { Meteor } from "meteor/meteor";


const result = Meteor.loginWithPassword();
  selector,
"password",

() => {}, // this param is optional
);

如果有多个用户名或电子邮件仅在大小写方面不同的用户,则需要进行区分大小写的匹配。尽管 createUser 不会允许您创建具有模棱两可的用户名或电子邮件的用户,但这可能会发生在现有数据库中或如果您直接修改用户集合时。

此方法可能会失败并抛出以下错误之一

  • 如果 userpassword 未定义,则为“登录请求的未识别选项 [400]”。
  • 如果 user 不是对象或字符串,或者 password 不是字符串,则为“匹配失败 [400]”。
  • 如果 user 中提供的电子邮件或用户名不属于注册用户,则为“用户未找到 [403]”。
  • 如果提供的密码不正确,则为“密码不正确 [403]”。
  • 如果 user 没有设置密码,则为“用户没有设置密码 [403]”。

此函数由 accounts-password 包提供。请参见下面的 密码 部分。

Meteor.loginWith<ExternalService>

仅限客户端

摘要

使用外部服务登录用户。

参数

源代码
名称类型描述必需
选项对象
回调函数

可选回调函数。成功时不带参数调用,失败时带单个Error参数调用。如果您使用“redirect” loginStyle,则无法调用此回调函数,因为应用程序在此期间将重新加载;请尝试使用客户端登录钩子代替。

选项

名称类型描述必需
requestPermissionsArray.<String>

要向用户请求的权限列表。

requestOfflineTokenBoolean

如果为真,则询问用户是否允许在离线时代表他们执行操作。这会在用户文档的services字段中存储额外的脱机令牌。目前仅支持 Google。

loginUrlParameters对象

向身份验证 URI 提供其他参数。目前仅支持 Google。请参阅Google Identity Platform 文档

loginHint字符串

外部服务将用来预填充登录提示的电子邮件地址。目前仅支持 Meteor 开发者帐户和 Google 帐户。如果与 Google 一起使用,也可以传递 Google 用户 ID。

loginStyle字符串

登录样式(“popup”或“redirect”,默认为登录服务的配置)。“popup”样式在单独的弹出窗口中打开登录页面,通常更受欢迎,因为 Meteor 应用程序不需要重新加载。“redirect”样式将 Meteor 应用程序的窗口重定向到登录页面,登录服务提供商会重定向回 Meteor 应用程序,然后重新加载。在无法打开弹出窗口的情况下(例如在移动 UIWebView 中),可以使用“redirect”样式。“redirect”样式依赖于会话存储,而 Safari 隐私模式下不可用,因此如果无法使用会话存储,则将强制使用“popup”样式。

redirectUrl字符串

如果使用“redirect”登录样式,则用户在授权完成后将返回到此 URL。

forceApprovalPromptBoolean

如果为真,则强制用户批准应用程序的权限,即使之前已批准也是如此。目前仅支持 Google。

js
import { Meteor } from "meteor/meteor";


const result = Meteor.loginWith<ExternalService>();
  options,  // this param is optional 
() => {}, // this param is optional
);

可用的函数是

这些函数使用 OAuth 启动与外部服务(例如:Facebook、Google 等)的登录过程。调用时,它们会打开一个新的弹出窗口,加载提供程序的登录页面。用户使用提供程序登录后,弹出窗口会关闭,Meteor 客户端会使用外部服务提供的信息登录到 Meteor 服务器。

请求权限

除了识别用户到您的应用程序之外,某些服务还具有允许您代表用户采取行动的 API。要向用户请求特定权限,请将requestPermissions选项传递给登录函数。这将导致用户在弹出对话框中看到一个额外的页面,以允许访问其数据。用户的accessToken(具有访问服务 API 的权限)存储在用户文档的services字段中。requestPermissions支持的值因每个登录服务而异,并在其各自的开发者网站上记录。

外部登录服务通常需要在使用前注册和配置您的应用程序。accounts-ui提供了一种最简单的方法来执行此操作,它提供了一个分步指南来配置每个服务。但是,数据也可以手动输入到ServiceConfiguration.configurations集合中,该集合由service-configuration包导出。

配置服务

首先,添加服务配置包

bash
meteor add service-configuration

然后,在您的应用程序服务器内部(此示例适用于 Weebo 服务),导入ServiceConfiguration

js
import { ServiceConfiguration } from "meteor/service-configuration";
ServiceConfiguration.configurations.upsert(
  { service: "weibo" },
  {
    $set: {
      loginStyle: "popup",
      clientId: "1292962797", // See table below for correct property name!
      secret: "75a730b58f5691de5522789070c319bc",
    },
  }
);

从 Meteor 2.7 开始,您不再需要手动设置配置,而是可以通过在Meteor.settings.packages.service-configuration.<service>下设置服务来使用 Meteor 设置。所有属性都可以在服务下设置,并将按原样添加到数据库中,因此请确保它们是正确的。对于上面的示例,设置如下所示

json
{
  "packages": {
    "service-configuration": {
      "weibo": {
        "loginStyle": "popup",
        "clientId": "1292962797",
        "secret": "75a730b58f5691de5522789070c319bc"
      }
    }
  }
}

用于 API 标识符的正确属性名称(即上述示例中的clientId)取决于使用的登录服务,因此请确保使用正确的属性名称。

属性名称服务
appIdFacebook
clientIdGithub、Google、Meetup、Meteor 开发者帐户、微博
consumerKeyTwitter

此外,每个外部服务都有自己的登录提供程序包和登录函数。例如,要支持 GitHub 登录,请在终端中运行以下命令

bash
meteor add accounts-github

并使用Meteor.loginWithGithub函数。

js
import { Meteor } from "meteor/meteor";
Meteor.loginWithGithub(
  {
    requestPermissions: ["user", "public_repo"],
  },
  (error) => {
    if (error) {
      Session.set("errorMessage", error.reason || "Unknown error");
    }
  }
);

应用程序启动时,登录服务配置会通过 DDP 从服务器发送到客户端;在配置加载之前,您可能无法调用登录函数。函数Accounts.loginServicesConfigured()是一个反应式数据源,一旦登录服务配置完成,它将返回 true;在它返回 true 之前,您不应该显示或激活登录按钮。

确保您的$ROOT_URL与您在外部服务中配置的授权域和回调 URL 匹配(例如,如果您在代理服务器后面运行 Meteor,则$ROOT_URL应该是外部可访问的 URL,而不是代理服务器内部的 URL)。

手动服务配置

您可以使用Accounts.loginServiceConfiguration查看和编辑设置集合。

js
import { Accounts } from "meteor/accounts-base";
Accounts.loginServiceConfiguration.find();

在使用提供程序(例如 Facebook 或 Google)配置 OAuth 登录时,Meteor 允许您选择基于弹出窗口或重定向的流程。在基于弹出窗口的流程中,当用户登录时,系统会提示他们在弹出窗口中登录提供程序。在基于重定向的流程中,用户的整个浏览器窗口将重定向到登录提供程序,并在登录完成后将窗口重定向回您的应用程序。

您还可以通过将选项传递给Meteor.loginWith<ExternalService>来选择要执行哪种类型的登录。

通常,基于弹出窗口的流程更可取,因为用户无需在登录流程结束时重新加载整个应用程序。但是,基于弹出窗口的流程需要浏览器功能(例如window.closewindow.opener),而并非所有移动环境都提供这些功能。特别是,我们建议在以下环境中使用Meteor.loginWith<ExternalService>({ loginStyle: 'redirect' })

  • 在 UIWebViews 内部(当您的应用程序加载到移动应用程序中时)
  • 在 iOS8 上的 Safari 中(由于错误,不支持window.close

{{ currentUser }}

摘要

调用Meteor.user()。使用{{#if currentUser}}检查用户是否已登录。

{{ loggingIn }}

摘要

Accounts.ui.config

仅限客户端

摘要

配置{{> loginButtons}}的行为。

参数

源代码
名称类型描述必需
选项对象

选项

名称类型描述必需
requestPermissions对象

要向用户请求的每个外部服务的权限

requestOfflineToken对象

要询问用户是否允许在离线时代表他们执行操作,请将相关外部服务映射到true。目前仅支持 Google。有关更多详细信息,请参阅Meteor.loginWithExternalService

forceApprovalPrompt对象

如果为真,则强制用户批准应用程序的权限,即使之前已批准也是如此。目前仅支持 Google。

passwordSignupFields字符串

在用户创建表单中显示哪些字段。'USERNAME_AND_EMAIL'、'USERNAME_AND_OPTIONAL_EMAIL'、'USERNAME_ONLY'或'EMAIL_ONLY'(默认值)之一。

passwordlessSignupFields字符串

在用户创建表单中显示哪些字段。'USERNAME_AND_EMAIL'、'EMAIL_ONLY'(默认值)之一。

示例

js
import { Accounts } from "meteor/accounts-base";

Accounts.ui.config({
  requestPermissions: {
    facebook: ["user_likes"],
    github: ["user", "repo"],
  },
  requestOfflineToken: {
    google: true,
  },
  passwordSignupFields: "USERNAME_AND_OPTIONAL_EMAIL",
});

从 Meteor 2.7 开始,您可以在Meteor.settings.public.packages.accounts-ui-unstyled下的 Meteor 设置中配置这些设置。

多服务器

accounts-base包导出了两个构造函数,称为AccountsClientAccountsServer,它们分别用于创建客户端和服务器上可用的Accounts对象。

此预定义的Accounts对象(以及Meteor的类似便捷方法,例如Meteor.logout)足以在 Meteor 应用程序中实现大多数与帐户相关的逻辑。但是,可以在更复杂的身份验证情况下多次实例化这两个构造函数,以在不同的帐户服务器及其客户端之间创建多个独立的连接。

AccountsCommon

摘要

AccountsClient 和 AccountsServer 的超级构造函数。

参数

源代码
名称类型描述必需
选项对象

一个包含以下字段的对象

  • connection {Object} 可选的 DDP 连接以供重用。
  • ddpUrl {String} 用于创建新 DDP 连接的可选 URL。
  • collection {String|Mongo.Collection} 保存用户的 Mongo.Collection 的名称或 Mongo.Collection 对象。
js
import { AccountsCommon } from "meteor/accounts-base"";

const accountsCommon = new AccountsCommon();
  options
);

AccountsClientAccountsServer类共享一个公共超类AccountsCommon。在AccountsCommon.prototype上定义的方法将通过预定义的Accounts对象(最常见)或使用AccountsClientAccountsServer构造函数创建的任何自定义accountsClientOrServer对象(不太常见)在客户端和服务器上都可用。

以下是一些这样的方法

accountsCommon.userId

摘要

获取当前用户 ID,如果未登录任何用户,则返回 null。一个反应式数据源。

js

// accountsCommon is an instance of AccountsCommon

const result = accountsCommon.userId();

accountsCommon.user

摘要

获取当前用户记录,如果未登录任何用户,则返回null。一个反应式数据源。在服务器上,此函数返回一个 Promise。

参数

源代码
名称类型描述必需
选项对象

选项

名称类型描述必需
字段MongoFieldSpecifier

要返回或排除的字段的字典。

js

// accountsCommon is an instance of AccountsCommon

const result = accountsCommon.user();
  options
);

accountsCommon.config

摘要

设置全局帐户选项。您也可以在Meteor.settings.packages.accounts中设置这些选项,而无需调用此函数。

参数

源代码
名称类型描述必需
选项对象

选项

名称类型描述必需
sendVerificationEmailBoolean

使用电子邮件地址注册的新用户将收到一封地址验证邮件。

禁止客户端创建账户Boolean

来自客户端的 createUser 调用将被拒绝。此外,如果您正在使用 accounts-ui,则“创建账户”链接将不可用。

限制通过电子邮件域名创建账户字符串

如果设置为字符串,则仅当新用户的电子邮件地址域名部分与该字符串匹配时才允许创建新用户。如果设置为函数,则仅当该函数返回 true 时才允许创建新用户。该函数会传递拟创建的新用户的完整电子邮件地址。适用于基于密码的登录和公开电子邮件地址的外部服务(Google、Facebook、GitHub)。启用此选项后,所有现有用户仍可以登录。示例:Accounts.config({ restrictCreationByEmailDomain: 'school.edu' })

登录过期时间数字

用户登录后到其令牌过期并被注销的时间(以毫秒为单位),以便进行更细粒度的控制。如果设置了 loginExpirationInDays,则它优先。

登录过期天数数字

用户登录后到其令牌过期并被注销的时间(以天为单位)。默认为 90 天。设置为 null 可禁用登录过期。

OAuth 密钥字符串

使用 oauth-encryption 包时,用于加密数据库中敏感账户凭据的 16 字节密钥,以 base64 编码。此选项只能在服务器上指定。有关详细信息,请参阅 packages/oauth-encryption/README.md。

重置密码令牌过期天数数字

从发送重置密码链接到令牌过期且用户无法再使用该链接重置密码的时间(以天为单位)。默认为 3 天。

重置密码令牌过期时间数字

从发送重置密码链接到令牌过期且用户无法再使用该链接重置密码的时间(以毫秒为单位)。如果设置了 passwordResetTokenExpirationInDays,则它优先。

设置初始密码令牌过期天数数字

从发送设置初始密码链接到令牌过期且用户无法再使用该链接设置密码的时间(以天为单位)。默认为 30 天。

设置初始密码令牌过期时间数字

从发送设置初始密码链接到令牌过期且用户无法再使用该链接设置密码的时间(以毫秒为单位)。如果设置了 passwordEnrollTokenExpirationInDays,则它优先。

模糊错误消息Boolean

从登录失败中返回模糊错误消息,以防止用户枚举。默认为 false,但在生产环境中建议将其默认为 true

bcrypt 轮数数字

允许覆盖用于存储密码的 bcrypt 轮数(也称为工作因子)。默认为 10。

默认字段选择器MongoFieldSpecifier

在不使用字段选择器的情况下调用 Meteor.user()Meteor.findUserBy...() 函数以及所有 onLoginonLoginFailureonLogout 回调时,默认情况下排除大型自定义字段。示例:Accounts.config({ defaultFieldSelector: { myBigArray: 0 }})。注意使用此选项。例如,如果您在排除字段时不包含 email,则可能会遇到诸如 forgotPassword 之类的函数的问题,因为它们将无法获得所需的数据。建议您始终保留字段 _idusernameemail

集合字符串

用于保存用户的集合名称或 Mongo.Collection 对象。

登录令牌过期小时数数字

使用 accounts-2fa 包时,使用此选项设置发送的令牌的有效时间。因为它只是一个数字,所以您可以使用例如 0.5 使令牌仅在半小时内有效。默认为 1 小时。

令牌序列长度数字

使用 accounts-2fa 包时,使用此选项设置生成的令牌序列的大小。默认为 6。

客户端存储'会话'

默认情况下,登录凭据存储在本地存储中,将此设置为 true 将切换为使用会话存储。

js

// accountsCommon is an instance of AccountsCommon

const result = accountsCommon.config();
  options
);

从 Meteor 2.5 开始,您可以在 Meteor.settings.packages.accounts-base 下的 Meteor 设置中设置这些选项。请注意,由于设置文件的性质,您将无法设置需要函数的参数。

accountsCommon.onLogin

摘要

注册一个在登录尝试成功后调用的回调函数。

参数

源代码
名称类型描述必需
函数函数

登录成功时调用的回调函数。回调函数接收一个包含登录详细信息的单个对象。此对象包含客户端和服务器上的登录结果类型(密码、恢复等)。在服务器上注册的 onLogin 回调函数还会接收其他数据,例如用户信息、连接信息等。

js

// accountsCommon is an instance of AccountsCommon

const result = accountsCommon.onLogin();
  () => {}
);

有关详细信息,请参阅 AccountsCommon#onLoginFailure 的描述。

accountsCommon.onLoginFailure

摘要

注册一个在登录尝试失败后调用的回调函数。

参数

源代码
名称类型描述必需
函数函数

登录失败后调用的回调函数。

js

// accountsCommon is an instance of AccountsCommon

const result = accountsCommon.onLoginFailure();
  () => {}
);

对于每次登录尝试,都会调用 onLoginonLoginFailure 回调函数之一。onLogin 回调函数在用户成功登录后调用。onLoginFailure 回调函数在登录尝试被拒绝后调用。

这些函数返回一个包含单个方法 stop 的对象。调用 stop() 将取消注册回调函数。

在服务器端,回调函数接收一个参数,与 validateLoginAttempt 中的尝试信息对象相同。在客户端,回调函数参数是一个包含单个 error 属性的对象,该属性设置为从登录失败尝试中接收到的 Error 对象。

accountsCommon.onLogout

摘要

注册一个在注销尝试成功后调用的回调函数。

参数

源代码
名称类型描述必需
函数函数

注销成功时调用的回调函数。

在服务器端,func 回调函数接收一个参数,其中包含以下对象。在客户端,不传递任何参数。

js
import { AccountsCommon } from "meteor/accounts-base";
const options = {
  //...
};
const accountsCommon = new AccountsCommon(options);

accountsCommon.onLogout(({ user, connection, collection }) => {
  console.log(user);
  //        ˆˆˆˆˆˆ The Meteor user object of the user which just logged out
  console.log(connection);
  //        ˆˆˆˆˆˆ The connection object the request came in on. See
  //               `Meteor.onConnection` for details.

  console.log(collection);
  //        ˆˆˆˆˆˆ The `collection` The name of the Mongo.Collection or the
  //               Mongo.Collection object to hold the users.
});

AccountsClient

仅限客户端

摘要

客户端上 Accounts 对象的构造函数。

参数

源代码
名称类型描述必需
选项对象

一个包含以下字段的对象

选项

名称类型描述必需
连接对象

可选的 DDP 连接以供重用。

DDP URL字符串

用于创建新的 DDP 连接的可选 URL。

客户端存储'会话'

可选地定义您希望在客户端上使用的凭据存储类型。默认为 'local' 以使用 localStorage。设置为 'session' 以使用会话存储。

js
import { AccountsClient } from "meteor/accounts-base"";

const accountsClient = new AccountsClient();
  options
);

在任何 AccountsClient 实例化中,最多应提供 options.connectionoptions.ddpUrl 之一。如果两者都没有提供,则 Meteor.connection 将用作 AccountsClient 实例的 .connection 属性。

请注意,由于使用了诸如 window.localStorage 之类的浏览器 API,AccountsClient 目前仅在客户端可用。但是,原则上,可能需要从一个服务器到另一个远程账户服务器建立客户端连接。如果您发现自己需要此服务器到服务器的功能,请 告知我们

这些方法定义在 AccountsClient.prototype 上,因此仅在客户端可用

accountsClient.loggingIn

仅限客户端

摘要

如果当前正在进行登录方法(例如 Meteor.loginWithPasswordMeteor.loginWithFacebookAccounts.createUser),则为 true。一个反应式数据源。

js

// accountsClient is an instance of AccountsClient

const result = accountsClient.loggingIn();

accountsClient.logout

仅限客户端

摘要

注销用户。

参数

源代码
名称类型描述必需
回调函数

可选回调。成功时不带任何参数调用,或失败时带单个 Error 参数调用。

js

// accountsClient is an instance of AccountsClient

const result = accountsClient.logout();
  () => {}
);

accountsClient.logoutOtherClients

仅限客户端

摘要

注销以当前用户身份登录的其他客户端,但不注销调用此函数的客户端。

参数

源代码
名称类型描述必需
回调函数

可选回调。成功时不带任何参数调用,或失败时带单个 Error 参数调用。

js

// accountsClient is an instance of AccountsClient

const result = accountsClient.logoutOtherClients();
  () => {}
);

AccountsServer

仅限服务器

摘要

服务器上 Accounts 命名空间的构造函数。

参数

源代码
名称类型描述必需
服务器对象

服务器对象,例如 Meteor.server

js
import { AccountsServer } from "meteor/accounts-base"";

const accountsServer = new AccountsServer();
  server
);

这些方法定义在 AccountsServer.prototype 上,因此仅在服务器上可用

accountsServer.validateNewUser

仅限服务器

摘要

设置对新用户创建的限制。

参数

源代码
名称类型描述必需
函数函数

每当创建新用户时调用。接收新用户对象,并返回 true 以允许创建或返回 false 以中止创建。

js

// accountsServer is an instance of AccountsServer

const result = accountsServer.validateNewUser();
  () => {}
);

可以多次调用此函数。如果任何函数返回 false 或抛出错误,则新用户创建将被中止。要设置特定的错误消息(将由 accounts-ui 显示),请抛出一个新的 Meteor.Error

示例

js
import { Accounts } from "meteor/accounts-base";

// Validate username, sending a specific error message on failure.
Accounts.validateNewUser((user) => {
  if (user.username && user.username.length >= 3) {
    return true;
  } else {
    throw new Meteor.Error(403, "Username must have at least 3 characters");
  }
});

// Validate username, without a specific error message.
Accounts.validateNewUser((user) => {
  return user.username !== "root";
});

如果用户是在客户端登录尝试的一部分中创建的(例如,从客户端调用 Accounts.createUser首次使用外部服务登录),则这些回调函数将在 Accounts.validateLoginAttempt 回调函数之前调用。如果这些回调函数成功但那些回调函数失败,则用户仍将被创建,但连接将不会以该用户身份登录。

accountsServer.onCreateUser

仅限服务器

摘要

自定义新用户创建。

参数

源代码
名称类型描述必需
函数函数

每当创建新用户时调用。返回新用户对象,或抛出一个 Error 以中止创建。

当您需要执行的操作不仅仅是接受或拒绝新用户创建时,可以使用此函数。使用此函数,您可以以编程方式控制新用户文档的内容。

您传递的函数将使用两个参数调用:optionsuseroptions 参数来自基于密码的用户或外部服务登录流程的 Accounts.createUseroptions 可能来自不受信任的客户端,因此请确保验证从中读取的任何值。user 参数在服务器上创建,并包含一个建议的用户对象,其中包含用户登录所需的所有自动生成的字段,包括 _id

该函数应返回用户文档(传递的文档或新创建的对象),并包含所需的任何修改。返回的文档将直接插入到 Meteor.users 集合中。

默认创建用户函数只是将 options.profile 复制到新用户文档中。调用 onCreateUser 将覆盖默认钩子。这只能调用一次。

示例

js
import { Accounts } from "meteor/accounts-base";
// Support for playing D&D: Roll 3d6 for dexterity.
Accounts.onCreateUser((options, user) => {
  const customizedUser = Object.assign(
    {
      dexterity: _.random(1, 6) + _.random(1, 6) + _.random(1, 6),
    },
    user
  );

  // We still want the default hook's 'profile' behavior.
  if (options.profile) {
    customizedUser.profile = options.profile;
  }

  return customizedUser;
});

accountsServer.validateLoginAttempt

仅限服务器

摘要

验证登录尝试。

参数

源代码
名称类型描述必需
函数函数

每当尝试登录(成功或失败)时调用。可以通过返回虚假值或抛出异常来中止登录。

使用回调函数调用 validateLoginAttempt 以在登录尝试时调用。它返回一个包含单个方法 stop 的对象。调用 stop() 将取消注册回调函数。

进行登录尝试时,注册的验证登录回调函数将使用一个参数调用,您可以查看示例

js
import { AccountsServer } from "meteor/accounts-base";
const options = {
  //...
};
const accountsServer = new AccountsServer(options);

accountsServer.validateLoginAttempt(
  ({
    type, // String
    allowed, // Boolean
    error, // Error
    user, // Object
    connection, // Object
    collection, // Object
    methodName, // String
    methodArguments, // Array<String>
  }) => {
    console.log(type);
    //        ˆˆˆˆˆˆ   The service name, such as "password" or "twitter".

    console.log(allowed);
    //        ˆˆˆˆˆˆ   Whether this login is allowed and will be successful (if not aborted
    //                 by any of the validateLoginAttempt callbacks). False if the login
    //                 will not succeed (for example, an invalid password or the login was
    //                 aborted by a previous validateLoginAttempt callback).

    console.log(error);
    //        ˆˆˆˆˆˆ   When `allowed` is false, the exception describing why the login
    //                 failed. It will be a `Meteor.Error` for failures reported to the
    //                 user (such as invalid password), and can be a another kind of
    //                 exception for internal errors.

    console.log(user);
    //        ˆˆˆˆˆˆ   When it is known which user was attempting to login,
    //                 the Meteor user object. This will always be present for successful logins.

    console.log(connection);
    //            ˆˆˆˆˆˆ The `connection` object the request came in on. See
    //                   [`Meteor.onConnection`](#meteor_onconnection) for details.

    console.log(collection);
    //            ˆˆˆˆˆˆ The `collection` The name of the Mongo.Collection or the
    //                   Mongo.Collection object to hold the users.

    console.log(methodName);
    //            ˆˆˆˆˆˆ The name of the Meteor method being used to login.
    //                   For example, "login", "loginWithPassword", or "loginWith<ExternalService>".

    console.log(methodArguments);
    //            ˆˆˆˆˆˆ An array of the arguments passed to the login method.
    //                   For example, `["username", "password"]`
  }
);

验证登录回调函数必须返回真值才能继续登录。如果回调函数返回虚假值或抛出异常,则登录将被中止。抛出 Meteor.Error 将向用户报告错误原因。

所有注册的验证登录回调都会被调用,即使其中一个回调中止了登录。由于登录现在不会成功,因此后面的回调将看到allowed字段设置为false。这允许后面的回调覆盖之前回调的错误;例如,您可以用不同的消息覆盖“密码错误”错误。

如果登录尝试已被确定失败,则通常不需要运行没有明确尝试覆盖先前错误的验证登录回调,并且应该以以下内容开头

js
if (!attempt.allowed) {
  return false;
}

accountsServer.beforeExternalLogin

仅限服务器

摘要

验证来自外部服务的登录

参数

源代码
名称类型描述必需
函数函数

每当尝试从外部服务登录/创建用户时调用。可以通过传递虚假值或抛出异常来中止基于此登录的登录或用户创建。

如果您需要验证来自外部服务的用户是否允许登录或创建帐户,请使用此钩子。

js
import { AccountsServer } from "meteor/accounts-base";
const options = {
  //...
};
const accountsServer = new AccountsServer(options);

accountsServer.beforeExternalLogin(({ type, data, user }) => {
  console.log(type);
  //       ˆˆˆˆˆˆ The service name, such as "google" or "twitter". Is a String

  console.log(data);
  //       ˆˆˆˆˆˆ Data retrieved from the service (eg: email, name, etc)
  //              Is an Object.

  console.log(user);
  //       ˆˆˆˆˆˆ If user was found in the database that matches the criteria from the service,
  //              their data will be provided here. Is an Object.
});

您应该返回一个Boolean值,如果应继续登录/注册则返回true,如果应终止则返回false。如果终止,登录尝试将抛出错误403,消息为:Login forbidden

accountsServer.setAdditionalFindUserOnExternalLogin

仅限服务器

摘要

自定义外部登录的用户选择

参数

源代码
名称类型描述必需
函数函数

每当用户通过 oauth 登录且未找到具有服务 ID 的用户时调用。返回用户或 undefined。

当允许您的用户使用外部服务进行身份验证时,该过程最终将调用Accounts.updateOrCreateUserFromExternalService。默认情况下,这将搜索具有service.<servicename>.id的用户,如果未找到,则会创建一个新用户。由于这并不总是理想的,您可以使用此钩子作为逃生舱来查找具有不同选择器(可能是emails.addressusername)的用户。请注意,只有在使用service.<servicename>.id选择器未找到用户时才会调用此函数。

该函数将被调用,并带有一个参数,即 info 对象

js
import { AccountsServer } from "meteor/accounts-base";
const options = {
  //...
};
const accountsServer = new AccountsServer(options);

accountsServer.setAdditionalFindUserOnExternalLogin(
  ({ serviceName, serviceData, options }) => {
    // serviceName: String
    //   The external service name, such as "google" or "twitter".
    // serviceData: Object
    //   The data returned by the service oauth request.
    // options: Object
    //   An optional arugment passed down from the oauth service that may contain
    //   additional user profile information. As the data in `options` comes from an
    //   external source, make sure you validate any values you read from it.
  }
);

该函数应该返回一个用户文档或undefined。返回用户将导致填充用户文档中的service.<servicename>,而返回undefined将导致创建一个新用户帐户。如果您希望不创建新帐户,则可以抛出错误而不是返回。

示例

js
// If a user has already been created, and used their Google email, this will
// allow them to sign in with the Meteor.loginWithGoogle method later, without
// creating a new user.
Accounts.setAdditionalFindUserOnExternalLogin(
  ({ serviceName, serviceData }) => {
    if (serviceName === "google") {
      // Note: Consider security implications. If someone other than the owner
      // gains access to the account on the third-party service they could use
      // the e-mail set there to access the account on your app.
      // Most often this is not an issue, but as a developer you should be aware
      // of how bad actors could play.
      return Accounts.findUserByEmail(serviceData.email);
    }
  }
);

accountsServer.registerLoginHandler

仅限服务器

摘要

注册新的登录处理程序。

参数

源代码
名称类型描述必需
名称字符串

登录方法的类型,例如 oauth、password 等。

处理程序函数

一个接收选项对象(作为参数传递给login方法)并返回undefined之一的函数,表示不处理或登录方法结果对象。

js

// accountsServer is an instance of AccountsServer

const result = accountsServer.registerLoginHandler();
  "name",  // this param is optional 
() => {},
);

使用此方法注册您自己的自定义身份验证方法。所有其他内置帐户包也使用此方法与帐户系统集成。

可以注册多个登录处理程序。当发出登录请求时,它将遍历所有这些处理程序以找到其自己的处理程序。

注册的处理程序回调将被调用,并带有一个参数,即来自登录方法的options对象。例如,如果您想使用纯文本密码登录,options可能是{ user: { username: <username> }, password: <password> },或{ user: { email: <email> }, password: <password> }

如果登录处理程序不打算处理登录请求,则应返回undefined,否则返回登录结果对象。

速率限制

默认情况下,已向DDPRateLimiter添加了一些规则,这些规则将登录、新用户注册和密码重置调用限制为每个会话每 10 秒 5 个请求。这些是对字典攻击的基本解决方案,在字典攻击中,恶意用户试图通过尝试所有可能的密码来猜测合法用户的密码。

可以通过调用Accounts.removeDefaultRateLimit()删除这些速率限制规则。有关更多信息,请参阅DDPRateLimiter文档。

accountsServer.addDefaultRateLimit

仅限服务器

摘要

添加一个默认规则,限制登录、创建新用户和重置密码,每个连接每 10 秒 5 次。

js

// accountsServer is an instance of AccountsServer

const result = accountsServer.addDefaultRateLimit();

accountsServer.removeDefaultRateLimit

仅限服务器

摘要

删除默认速率限制规则

js

// accountsServer is an instance of AccountsServer

const result = accountsServer.removeDefaultRateLimit();

密码

accounts-password包包含一个完整的基于密码的身份验证系统。除了基本的基于用户名和密码的登录过程外,它还支持基于电子邮件的登录,包括地址验证和密码恢复电子邮件。

Meteor 服务器使用bcrypt算法存储密码。如果服务器的数据库遭到破坏,这有助于防止尴尬的密码泄露。

要向您的应用程序添加密码支持,请在您的终端中运行此命令

bash
meteor add accounts-password

除了配置email包的MAIL_URL之外,至关重要的是您在Accounts.emailTemplates中设置正确的价值(特别是from地址),以确保正确发送电子邮件!

您可以使用以下函数构建自己的用户界面,或使用accounts-ui包含一个用于基于密码的登录的交钥匙用户界面。

Accounts.createUser

摘要

创建一个新用户。

参数

源代码
名称类型描述必需
选项对象
回调函数

仅限客户端,可选回调。成功时不带参数调用,失败时带一个Error参数调用。

选项

名称类型描述必需
用户名字符串

此用户的唯一名称。

电子邮件字符串

用户的电子邮件地址。

密码字符串

用户的密码。这不是通过网络以纯文本发送的。

个人资料对象

用户的个人资料,通常包括name字段。

js
import { Accounts } from "meteor/accounts-base";


const result = Accounts.createUser();
  options,
() => {}, // this param is optional
);

在客户端,此函数在成功完成时以新创建的用户身份登录。在服务器上,它返回新创建的用户 ID。

在客户端,您必须传递password和至少一个usernameemail——足够的信息供用户稍后能够再次登录。如果现有用户的用户名或电子邮件仅在大小写方面有所不同,则createUser将失败。回调的error.reason将是'Username already exists.''Email already exists.'在后一种情况下,用户可以然后登录重置他们的密码

在服务器上,您不需要指定password,但用户将无法登录,直到它拥有密码(例如,使用Accounts.setPasswordAsync设置)。要在服务器上创建没有密码的帐户并仍然允许用户选择自己的密码,请使用email选项调用createUser,然后调用Accounts.sendEnrollmentEmail。这将向用户发送一封包含设置其初始密码链接的电子邮件。

默认情况下,profile选项将直接添加到新用户文档中。要覆盖此行为,请使用Accounts.onCreateUser

此函数仅用于创建具有密码的用户。外部服务登录流程不使用此函数。

不要直接修改Meteor.users集合中的文档,请使用这些便捷函数,这些函数在更新前会正确检查不区分大小写的重复项。

Accounts.createUserAsync

摘要

创建一个新用户并返回其结果的 promise。

参数

源代码
名称类型描述必需
选项对象

选项

名称类型描述必需
用户名字符串

此用户的唯一名称。

电子邮件字符串

用户的电子邮件地址。

密码字符串

用户的密码。这不是通过网络以纯文本发送的。

个人资料对象

用户的个人资料,通常包括name字段。

js
import { Accounts } from "meteor/accounts-base";


const result = Accounts.createUserAsync();
  options
);

Accounts.createUserVerifyingEmail

仅限服务器

摘要

异步创建用户并在options.email被告知时发送电子邮件。然后,如果来自Accounts包的sendVerificationEmail选项已启用,则如果options.password被告知,您将发送验证电子邮件,否则您将发送注册电子邮件。

参数

源代码
名称类型描述必需
选项对象

创建用户时要传递的选项对象

选项

名称类型描述必需
用户名字符串

此用户的唯一名称。

电子邮件字符串

用户的电子邮件地址。

密码字符串

用户的密码。这不是通过网络以纯文本发送的。

个人资料对象

用户的个人资料,通常包括name字段。

js
import { Accounts } from "meteor/accounts-base";


const result = Accounts.createUserVerifyingEmail();
  options
);

Accounts.setUsername

仅限服务器

摘要

异步更改用户的用户名。使用此方法而不是直接更新数据库。如果存在用户名仅在大小写方面有所不同的用户,则操作将失败。

参数

源代码
名称类型描述必需
用户 ID字符串

要更新的用户 ID。

新用户名字符串

用户的新的用户名。

js
import { Accounts } from "meteor/accounts-base";


const result = Accounts.setUsername();
  "userId",
"newUsername",
);

Accounts.addEmailAsync

仅限服务器

摘要

异步为用户添加电子邮件地址。使用此方法而不是直接更新数据库。如果存在电子邮件地址仅在大小写方面有所不同的其他用户,则操作将失败。但是,如果指定的用户具有仅在大小写方面有所不同的现有电子邮件,我们将替换它。

参数

源代码
名称类型描述必需
用户 ID字符串

要更新的用户 ID。

新电子邮件字符串

用户的新的电子邮件地址。

已验证Boolean

可选 - 是否应将新的电子邮件地址标记为已验证。默认为 false。

js
import { Accounts } from "meteor/accounts-base";


const result = Accounts.addEmailAsync();
  "userId",
"newEmail",

false, // this param is optional
);

默认情况下,电子邮件地址将添加{ verified: false }。使用Accounts.sendVerificationEmail发送包含用户可用于验证其电子邮件地址的链接的电子邮件。

Accounts.removeEmail

仅限服务器

摘要

异步删除用户的电子邮件地址。使用此方法而不是直接更新数据库。

参数

源代码
名称类型描述必需
用户 ID字符串

要更新的用户 ID。

电子邮件字符串

要删除的电子邮件地址。

js
import { Accounts } from "meteor/accounts-base";


const result = Accounts.removeEmail();
  "userId",
"email",
);

Accounts.verifyEmail

仅限客户端

摘要

将用户的电子邮件地址标记为已验证。如果用户未启用 2FA,则之后登录用户。

参数

源代码
名称类型描述必需
令牌字符串

从验证 URL 中检索到的令牌。

回调函数

可选回调。成功时不带任何参数调用,或失败时带单个 Error 参数调用。

js
import { Accounts } from "meteor/accounts-base";


const result = Accounts.verifyEmail();
  "token",
() => {}, // this param is optional
);

如果尝试验证电子邮件的用户启用了 2FA,则将抛出此错误

  • "电子邮件已验证,但用户未登录,因为已启用 2FA [2fa-enabled]": 如果用户启用了 2FA,则不再自动登录用户。

此函数接受传递给使用Accounts.onEmailVerificationLink注册的回调的令牌。

Accounts.findUserByUsername

仅限服务器

摘要

异步查找具有指定用户名的用户。首先尝试区分大小写匹配用户名;如果失败,则尝试不区分大小写;但如果多个用户匹配不区分大小写的搜索,则返回 null。

参数

源代码
名称类型描述必需
用户名字符串

要查找的用户名

选项对象

选项

名称类型描述必需
字段MongoFieldSpecifier

要返回或排除的字段的字典。

js
import { Accounts } from "meteor/accounts-base";

/** @returns Promise<Object> */
const result = Accounts.findUserByUsername();
  "username",
options, // this param is optional
);

Accounts.findUserByEmail

仅限服务器

摘要

异步查找指定电子邮件的用户。首先尝试区分大小写匹配电子邮件;如果失败,则尝试不区分大小写;但如果多个用户匹配不区分大小写的搜索,则返回 null。

参数

源代码
名称类型描述必需
电子邮件字符串

要查找的电子邮件地址

选项对象

选项

名称类型描述必需
字段MongoFieldSpecifier

要返回或排除的字段的字典。

js
import { Accounts } from "meteor/accounts-base";

/** @returns Promise<Object> */
const result = Accounts.findUserByEmail();
  "email",
options, // this param is optional
);

使用以下函数从服务器或客户端启动密码更改或重置。

Accounts.changePassword

仅限客户端

摘要

更改当前用户的密码。必须已登录。

参数

源代码
名称类型描述必需
oldPassword字符串

用户的当前密码。此密码**不会**以明文形式通过网络发送。

newPassword字符串

用户的新的密码。此密码**不会**以明文形式通过网络发送。

回调函数

可选回调。成功时不带任何参数调用,或失败时带单个 Error 参数调用。

js
import { Accounts } from "meteor/accounts-base";


const result = Accounts.changePassword();
  "oldPassword",
"newPassword",

() => {}, // this param is optional
);

Accounts.forgotPassword

仅限客户端

摘要

请求忘记密码邮件。

参数

源代码
名称类型描述必需
选项对象
回调函数

可选回调。成功时不带任何参数调用,或失败时带单个 Error 参数调用。

选项

名称类型描述必需
电子邮件字符串

发送密码重置链接的电子邮件地址。

js
import { Accounts } from "meteor/accounts-base";


const result = Accounts.forgotPassword();
  options,
() => {}, // this param is optional
);

这会触发对服务器上的Accounts.sendResetPasswordEmail的调用。当用户访问此电子邮件中的链接时,将调用使用Accounts.onResetPasswordLink注册的回调。

如果您正在使用accounts-ui,则此操作会自动处理。否则,您有责任提示用户输入新密码并调用resetPassword

Accounts.resetPassword

仅限客户端

摘要

使用在电子邮件中收到的令牌重置用户的密码。如果用户没有启用 2FA,则之后登录用户。

参数

源代码
名称类型描述必需
令牌字符串

从重置密码 URL 中检索到的令牌。

newPassword字符串

用户的新的密码。此密码**不会**以明文形式通过网络发送。

回调函数

可选回调。成功时不带任何参数调用,或失败时带单个 Error 参数调用。

js
import { Accounts } from "meteor/accounts-base";


const result = Accounts.resetPassword();
  "token",
"newPassword",

() => {}, // this param is optional
);

此函数接受传递到使用AccountsClient#onResetPasswordLinkAccounts.onEnrollmentLink注册的回调中的令牌。

如果尝试重置密码的用户启用了 2FA,则会抛出此错误

  • "已更改密码,但用户未登录,因为已启用 2FA [2fa-enabled]": 如果用户启用了 2FA,则不再自动登录用户。

Accounts.setPasswordAsync

仅限服务器

摘要

强制更改用户的密码。

参数

源代码
名称类型描述必需
用户 ID字符串

要更新的用户 ID。

newPassword字符串

用户的新的密码。

选项对象

选项

名称类型描述必需
logout对象

注销与此 userId 相关的所有当前连接(默认:true)

js
import { Accounts } from "meteor/accounts-base";


const result = Accounts.setPasswordAsync();
  "userId",
"newPassword",

options, // this param is optional
);

Accounts.sendResetPasswordEmail

仅限服务器

摘要

异步发送一封电子邮件,其中包含用户可以用来重置其密码的链接。

参数

源代码
名称类型描述必需
用户 ID字符串

要发送电子邮件的用户 ID。

电子邮件字符串

可选。要发送电子邮件的用户地址。此地址必须位于用户的emails列表中。默认为列表中的第一个电子邮件。

extraTokenData对象

可选的要添加到令牌记录中的其他数据。

extraParams对象

可选的要添加到重置 URL 中的其他参数。

js
import { Accounts } from "meteor/accounts-base";

/** @returns Promise<Object> */
const result = Accounts.sendResetPasswordEmail();
  "userId",
"email", // this param is optional

extraTokenData, // this param is optional

extraParams, // this param is optional
);

当用户访问此电子邮件中的链接时,将调用使用AccountsClient#onResetPasswordLink注册的回调。

要自定义电子邮件内容,请参阅Accounts.emailTemplates

Accounts.sendEnrollmentEmail

仅限服务器

摘要

异步发送一封电子邮件,其中包含用户可以用来设置其初始密码的链接。

参数

源代码
名称类型描述必需
用户 ID字符串

要发送电子邮件的用户 ID。

电子邮件字符串

可选。要发送电子邮件的用户地址。此地址必须位于用户的emails列表中。默认为列表中的第一个电子邮件。

extraTokenData对象

可选的要添加到令牌记录中的其他数据。

extraParams对象

可选的要添加到注册 URL 中的其他参数。

js
import { Accounts } from "meteor/accounts-base";

/** @returns Promise<Object> */
const result = Accounts.sendEnrollmentEmail();
  "userId",
"email", // this param is optional

extraTokenData, // this param is optional

extraParams, // this param is optional
);

当用户访问此电子邮件中的链接时,将调用使用Accounts.onEnrollmentLink注册的回调。

要自定义电子邮件内容,请参阅Accounts.emailTemplates

Accounts.sendVerificationEmail

仅限服务器

摘要

异步发送一封电子邮件,其中包含用户可以用来验证其电子邮件地址的链接。

参数

源代码
名称类型描述必需
用户 ID字符串

要发送电子邮件的用户 ID。

电子邮件字符串

可选。要发送电子邮件的用户地址。此地址必须位于用户的emails列表中。默认为列表中的第一个未经验证的电子邮件。

extraTokenData对象

可选的要添加到令牌记录中的其他数据。

extraParams对象

可选的要添加到验证 URL 中的其他参数。

js
import { Accounts } from "meteor/accounts-base";

/** @returns Promise<Object> */
const result = Accounts.sendVerificationEmail();
  "userId",
"email", // this param is optional

extraTokenData, // this param is optional

extraParams, // this param is optional
);

当用户访问此电子邮件中的链接时,将调用使用Accounts.onEmailVerificationLink注册的回调。

要自定义电子邮件内容,请参阅Accounts.emailTemplates

摘要

注册一个函数,在点击由Accounts.sendResetPasswordEmail发送的电子邮件中的重置密码链接时调用。此函数应在顶级代码中调用,而不是在Meteor.startup()内部调用。

参数

源代码
名称类型描述必需
回调函数

要调用的函数。它有两个参数

  1. token:一个密码重置令牌,可以传递给Accounts.resetPassword
  2. done:在密码重置 UI 流程完成后要调用的函数。正常的登录流程将暂停,直到调用此函数,以便即使用户 B 已登录,也可以重置用户 A 的密码。
js
import { Accounts } from "meteor/accounts-base";


const result = Accounts.onResetPasswordLink();
  () => {}
);

摘要

注册一个函数,在点击由Accounts.sendEnrollmentEmail发送的电子邮件中的帐户注册链接时调用。此函数应在顶级代码中调用,而不是在Meteor.startup()内部调用。

参数

源代码
名称类型描述必需
回调函数

要调用的函数。它有两个参数

  1. token:一个密码重置令牌,可以传递给Accounts.resetPassword,以向新注册的帐户提供密码。
  2. done:在注册 UI 流程完成后要调用的函数。正常的登录流程将暂停,直到调用此函数,以便即使用户 B 已登录,也可以注册用户 A。
js
import { Accounts } from "meteor/accounts-base";


const result = Accounts.onEnrollmentLink();
  () => {}
);

摘要

注册一个函数,在点击由Accounts.sendVerificationEmail发送的电子邮件中的电子邮件验证链接时调用。此函数应在顶级代码中调用,而不是在Meteor.startup()内部调用。

参数

源代码
名称类型描述必需
回调函数

要调用的函数。它有两个参数

  1. token:一个电子邮件验证令牌,可以传递给Accounts.verifyEmail
  2. done:在电子邮件验证 UI 流程完成后要调用的函数。正常的登录流程将暂停,直到调用此函数,以便在用户登录之前通知用户他们正在验证其电子邮件。
js
import { Accounts } from "meteor/accounts-base";


const result = Accounts.onEmailVerificationLink();
  () => {}
);

Accounts.emailTemplates

仅限服务器

摘要

自定义从 Accounts 系统发送的电子邮件的选项。

这是一个Object,其中包含几个字段,用于为sendResetPasswordEmailsendEnrollmentEmailsendVerificationEmail发送的电子邮件生成文本/html。

通过为其赋值来设置对象的字段

  • from:(**必需**)RFC5322 发件人地址的String。默认情况下,电子邮件是从[email protected]发送的。**如果您希望电子邮件正确发送,则应将其更改为您自己的域,因为大多数电子邮件提供商将拒绝从example.com发送的邮件。**
  • siteName:应用程序的公开名称。默认为应用程序的 DNS 名称(例如:awesome.meteor.com)。
  • headers:一个Object,用于自定义电子邮件标头,如Email.send中所述。
  • resetPassword:一个包含以下字段的Object
  • from:一个Function,用于覆盖由emailTemplates.from字段定义的from地址。
  • subject:一个Function,它接收一个用户对象并返回重置密码电子邮件主题行的String
  • text:一个可选的Function,它接收一个用户对象和一个 URL,并返回重置密码电子邮件的正文文本。
  • html:一个可选的Function,它接收一个用户对象和一个 URL,并返回重置密码电子邮件的正文 html。
  • enrollAccount:与resetPassword相同,但用于新帐户的初始密码设置。
  • verifyEmail:与resetPassword相同,但用于验证用户的电子邮件地址。

示例

js
import { Accounts } from "meteor/accounts-base";

Accounts.emailTemplates.siteName = "AwesomeSite";
Accounts.emailTemplates.from = "AwesomeSite Admin <[email protected]>";

Accounts.emailTemplates.enrollAccount.subject = (user) => {
  return `Welcome to Awesome Town, ${user.profile.name}`;
};

Accounts.emailTemplates.enrollAccount.text = (user, url) => {
  return (
    "You have been selected to participate in building a better future!" +
    " To activate your account, simply click the link below:\n\n" +
    url
  );
};

Accounts.emailTemplates.resetPassword.from = () => {
  // Overrides the value set in `Accounts.emailTemplates.from` when resetting
  // passwords.
  return "AwesomeSite Password Reset <[email protected]>";
};
Accounts.emailTemplates.verifyEmail = {
  subject() {
    return "Activate your account now!";
  },
  text(user, url) {
    return `Hey ${user}! Verify your e-mail by following this link: ${url}`;
  },
};

为此包启用 2FA

您可以通过使用accounts-2fa包将 2FA 添加到您的登录流程中。您可以在此处找到一个显示此外观的示例。