【问题标题】:How to get Iron-router query parameters in server hook如何在服务器挂钩中获取 Iron-router 查询参数
【发布时间】:2016-04-16 06:42:53
【问题描述】:

我正在尝试将推荐系统添加到我的项目中,因此目前我基于this package。我遇到的问题是我的项目只使用accounts-google 而不是帐户密码。这个包的工作方式是通过preSignUpHook为referrerCode(/register?r=ReferralCodeHere)添加铁路由器query parameters。我相信这仅适用于帐户-密码在使用 accounts-google 等 API 创建帐户时不起作用。

我的想法是使用 Meteor.users.before.insert 钩子来获取 Iron 路由器查询参数并将它们插入 Meteor.users 中的 referrerCode 字段,因为我已经在使用 Meteor Collection Hooks 来处理其他一些事情.

问题是我无法找到在服务器上获取查询参数的方法,我希望做这样的事情:

Meteor.users.before.insert(function(userId, doc) {
  doc.referrerCode = Referrer._referrerCode; // Link 1 
});

(Link 1)

但这只会显示为未定义。

如果我在我的注册页面并且它有这样的查询,例如:example.com/register?r=12345 然后我在客户端上运行Router.current().params.query.r 它返回12345。基本上,如果注册 URL 中存在推荐代码,我只需在新用户创建帐户时将其保存到 Meteor.users 中的推荐代码字段。

我对这个有点迷茫。我考虑将其设置为 Session 变量,然后在 before.insert 钩子中获取它,但这又只适用于客户端。我在想一个流星方法可能最适合这个,但我不确定我将如何构建它。非常感谢任何帮助!

【问题讨论】:

    标签: meteor iron-router


    【解决方案1】:
    1. 将推荐令牌放入profile
    2. 在你的钩子中使用它

    下面我复制了一些我以前使用过的代码。它是围绕Invitations 集合构建的,该集合跟踪谁邀请了谁:

    客户:

    var profile = {};
    ... any other profile settings you've captured
    if ( token ) profile.referralToken = token;
    Accounts.createUser({ email: email, password: password, profile: profile }, function(err){ ...})
    

    钩子:

    if ( options.profile.referralToken ){ // referral case
      var invitation = Invitations.findOne({ token: options.profile.referralToken });
      if ( invitation )
        user.invitationId = invitation._id; // the invitation used
        user.invitedBy = invitation.userId; // the referring user
      }
      delete options.profile.referralToken;
    }
    return user;
    

    【讨论】:

      猜你喜欢
      • 2014-05-27
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 2014-12-31
      相关资源
      最近更新 更多