5

我不确定以前是否有人问过这个问题,但是它loginTokens变得非常大并且没有任何清理使我的数据库增加了大小。对此正在做什么?其他人正在做什么来管理这个。我指的是默认值Meteor.users.services,它有一组 loginTokens,每次用户登录/注销时都会创建

"resume" : {
        "loginTokens" : [
            {
                "token" : "HMntXepqzPBLDGkGX",
                "when" : 1372559065392
            },
            {
                "token" : "uCHqA95HZZyN5tRtH",
                "when" : 1372563545565
            },
            {
                "token" : "sNGZhhATTrTg8582w",
                "when" : 1372622561176
            },
            {
                "token" : "hPWpm4uQQXWrkK6NS",
                "when" : 1372634411432
            },
            {
                "token" : "DFntTEcsKKT6bJ3rx",
                "when" : 1372635411745
            },
            {
                "token" : "BBM3acLQhuNtsHvkn",
                "when" : 1372638979158
            },
            {
                "token" : "EHgLLHMh6JWxKfuoe",
                "when" : 1372825386462
            }
        ]
    }
4

3 回答 3

3

这在 Meteor google 组中已多次引用,但这不是一个高优先级问题。在我的身份验证系统中,每当用户登录时,我都会删除超过一天的令牌。这样可以确保令牌在一段时间内没有成功登录时不会过期。

Accounts.registerLoginHandler (loginRequest) ->

  # ... Do whatever you need to do to authenticate the user

  stampedToken = Accounts._generateStampedLoginToken();
  Meteor.users.update userId,
    $push: {'services.resume.loginTokens': stampedToken}

  # Delete old resume tokens so they don't clog up the db
  cutoff = +(new Date) - (24*60*60)*1000
  Meteor.users.update userId, {
    $pull:
      'services.resume.loginTokens':
        when: {$lt: cutoff}
  },
  {multi : true}

  return {
    id: userId,
    token: stampedToken.token
  }
于 2013-07-04T16:22:31.817 回答
2

仅供参考,我确实对此提出了问题,并且有一个待处理的拉取请求可以修复它:

https://github.com/meteor/meteor/issues/891

于 2013-07-07T20:19:11.340 回答
0

我将 Meteor 与 Vue 一起使用,并通过以下方式对其进行了修复:

Accounts.validateLoginAttempt((loginAttempt) => {
if (loginAttempt.allowed && loginAttempt.user.services.resume?.loginTokens?.length > 0) {
    const loginTokensOfUser = loginAttempt.user.services.resume.loginTokens;
        Meteor.users.update(loginAttempt.user._id, {
            $set: {
              'services.resume.loginTokens': [loginTokensOfUser.pop()]
            }
        });
    return true;
}
});

此代码必须在服务器端。测试: Meteor 1.10.2 Vue 2.6.11

于 2020-06-26T20:13:47.017 回答