2016-04-14 86 views
0

我正在尝试为我的项目添加一个推荐系统,因此目前我正在将其建立在this package之外。我遇到的问题是我的项目只使用accounts-google而不是帐户密码。该软件包的工作方式是通过preSignUpHook为referrerCode(/register?r=ReferralCodeHere)添加铁路由器query parameters。我相信这只适用于帐户密码不会工作时创建一个API的帐户,如accounts-google如何在服务器钩子中获取铁路由器查询参数

我解决这个想法是使用一个Meteor.users.before.insert钩抓住铁路由器查询参数和因为我已经使用Meteor Collection Hooks的一对夫妇的其他东西把它们插入到我referrerCode领域Meteor.users。

的问题是我还没有能够找到一种方式来获得服务器上的查询参数,我希望做这样的事情:

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。基本上我只需要将这些保存到Meteor.users中的referralCode字段,当新用户创建帐户时,如果引用代码存在于注册URL中。

我对这个有点失落。我想过把它设置为一个Session变量,然后在.insert挂钩中获取它,但是这只能在客户端工作。我想流星法可能是最好的,但我不完全确定如何构造它。任何帮助是极大的赞赏!

回答

0
  1. 把转诊令牌到,在你的钩子

下面,我复制了一些代码,我曾经使用过profile

  • 使用。它是围绕一个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;