如何在注册Meteor后创建没有自动登录的用户

时间:2014-09-03 10:46:40

标签: login meteor hook account

我正在构建一个Meteor应用程序,我需要在用户创建帐户后删除Meteor的自动登录。

我正在使用UI的帐户密码和帐户条目(可选)。

有什么想法吗?谢谢。

3 个答案:

答案 0 :(得分:8)

这是一个通过电子邮件登录的简单解决方案,它在用户创建后停用自动登录并拒绝以后登录,直到验证电子邮件地址:

if (Meteor.isServer) {

    Accounts.validateLoginAttempt(function(attemptInfo) {

        if (attemptInfo.type == 'resume') return true;

        if (attemptInfo.methodName == 'createUser') return false;

        if (attemptInfo.methodName == 'login' && attemptInfo.allowed) {
            var verified = false;
            var email = attemptInfo.methodArguments[0].user.email;
            attemptInfo.user.emails.forEach(function(value, index) {
                if (email == value.address && value.verified) verified = true;
            });
            if (!verified) throw new Meteor.Error(403, 'Verify Email first!');
        }

        return true;
    });

}

答案 1 :(得分:1)

您可以使用以下代码:

在创作

上设置firstLogin标志
Accounts.onCreateUser(function(options, user) {
  user.firstLogin = true;
  return user;
});

更新标志的方法

Meteor.methods({
  updateUserFirstLogin: function(userId) {
    Meteor.users.update({
      _id: userId
    }, {
      $set: {
        'firstLogin': false
      }
    });
  }
});

检查用户是否是登录时的新用户

Accounts.validateLoginAttempt(function(attemptInfo) {
  if (!attemptInfo.user) {
    return false;
  }
  if (!attemptInfo.user.firstLogin) {
    return true;
  } else {
    Meteor.call('updateUserFirstLogin', attemptInfo.user._id);
    return false;
  }
});

答案 2 :(得分:0)

我找到了一种更简单的方法:

Accounts.validateLoginAttempt((data) => {
    let diff = new Date() - new Date(data.user.createdAt);
    if (diff < 2000) {
        console.info('New user created -- denying autologin.');
        return false;
    } else {
        return true;
    }
});

这看到用户刚刚创建,因此不会将其登录。