返回介绍

Accounts

发布于 2019-10-19 04:14:25 字数 8593 浏览 812 评论 0 收藏 0

Accounts

要增加账户功能,用meteor add添加下面的一个或多个包:

  • accounts-ui:这个包允许你通过在模板中使用{{> loginButtons}},来添加自动生成的登录UI, 用户可以登录。社区中有其它的替代选择,或者你也可以结合使用advanced Accounts methods
  • accounts-password: 这个包允许用户通过密码登录。添加之后,loginButtons下拉框会自动增加邮箱和密码文本域。
  • accounts-facebook, accounts-google, accounts-github, accounts-twitter, 以及其它由社区贡献的第三方登录包,让你的用户可以通过第三方网站登录。 它们会自动添加登录按钮到loginButtons下拉框中。

{{> loginButtons}} Client

在HTML中引入loginButtions模板,就可以使用Meteor默认的登录UI。使用前,需要先添加accounts-ui包:

$ meteor add accounts-ui

Anywhere but publish functionsMeteor.user()

Get the current user record, or null if no user is logged in. A reactive data source.

Meteor.users 集合中获取当前登录用户。等同于Meteor.users.findOne(Meteor.userId())

Anywhere but publish functionsMeteor.userId()

Get the current user id, or null if no user is logged in. A reactive data source.

Meteor.users

Anywhere

A Mongo.Collection containing user documents.

这个集合包含了所有注册用户,每个用户是一个文档。例如:

{
  _id: "bbca5d6a-2156-41c4-89da-0329e8c99a4f",  // Meteor.userId()
  username: "cool_kid_13", // unique name
  emails: [
    // each email address can only belong to one user.
    { address: "cool@example.com", verified: true },
    { address: "another@different.com", verified: false }
  ],
  createdAt: 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: 一个对象,默认情况下用户可以用任何数据新建和更新该字段。
  • services: 包含第三方登录服务使用的数据的对象。例如,它的reset字段包含的token,用于 忘记密码的超链接,它的resume字段包含的token,用于维持用户登录状态。

和所有的Mongo.Collection一样,在服务端,你可以获取用户集合 的所有文档,但是在客户端只能获取那些服务端发布的文档。

默认情况下,当前用户的username,emails,和profile会发布到客户端。 可以使用下面的代码发布当前用户的其它字段:

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

// client
Meteor.subscribe("userData");

如果安装了autopublish包,那么所有用户的信息都会发布到所有客户端。包括username, profile ,以及service中所有可以公开的字段(例如:services.facebook.id, services.twitter.screenName)。另外,使用autopublish时,对于当前登录用户会发布更多的信息, 包括access token。这样就可以直接从客户端发起API调用。

默认情况下,用户可以通过Accounts.createUser声明自己的profile字段, 也可以通过Meteor.users.update来修改它。要允许用户修改更多的字段,使用Meteor.users.allow ,要禁止用户对自己的文档做任何修改,使用:

Meteor.users.deny({update: function () { return true; }});

{{ currentUser }}

Calls Meteor.user(). Use {{#if currentUser}} to check whether the user is logged in.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文