3

我正在寻找一种自定义登录名的方法,以允许管理员向用户提供帐户和一次性临时密码(通过电子邮件),使用户能够登录网站(用户可以' t 自行创建帐户)。

用户首次登录时,系统会指示他们更改管理员提供的临时密码。

我有accounts-ui 和accounts-password 工作,但用户可以随意创建一个新帐户。

如果这很重要,我计划为此使用 Autoform 和 Iron Router。

我在 Meteor 文档中搜索“注册”,但 IMO 信息很少。是否有一个完整的示例可以帮助我入门?

4

2 回答 2

2

要禁用创建帐户的常用方法,请使用 Accounts.config:

forbidClientAccountCreation布尔值

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

然后,我认为您应该创建没有密码的帐户,而不是使用临时密码,然后用于Accounts.sendEnrollmentEmail向用户发送电子邮件以选择一个。

要在服务器上创建一个没有密码的帐户并仍然让用户选择自己的密码,请使用电子邮件选项调用 createUser,然后调用 Accounts.sendEnrollmentEmail。这将向用户发送一封电子邮件,其中包含设置初始密码的链接。

所以,这样的事情:

Accounts.config({forbidClientAccountCreation: true});

Meteor.methods({
  adminCreateAccount: function (accountAttributes) {
    if(Meteor.user() && Meteor.user().role == "admin") {
      var accountId = Accounts.createUser({
        'username': accountAttributes.username,
        'email': accountAttributes.emailAddress
      });
      Accounts.sendEnrollmentEmail(accountId);
    }
  }
});
于 2014-12-15T18:25:35.757 回答
0

你能做的是

  • 让管理员创建用户(Accounts.createUser)
  • 添加一个标记(例如user.profile.changedInitialPwd),当用户更改密码时将设置该标记)
  • 使用一些验证逻辑来​​确保用户在允许登录之前更改了密码

例如

Accounts.validateLoginAttempt(function(attempt){
  if (attempt.user && !attempt.user.profile.changedInitialPwd ) {
    console.log('Initial password not changed');
    return false; // the login is aborted
  }
  return true;
});
于 2014-12-15T18:51:25.240 回答