2015-06-04 54 views
7

我正在使用Meteor构建应用程序。每次用户登录到我的应用程序时,我都想创建一个新的购物车ID(作为可以存储物品的购物车)。但是,每次我在应用程序中打开一个新页面时,都会创建一个新的Cart ID。这是否意味着应用程序每次点击应用程序中的新页面时都会“登录”?这是我的代码:登录挂钩上的帐户流星环

Accounts.onLogin(function(user){ 
      var newCartId = uuid.new() 
      Meteor.users.update({_id: user.user._id}, {$set: {'profile.cartId': newCartId}}) 
      console.log('just created a new Cart ID at ' + Date()); 
    }); 

回答

10

是的,这是真的。

每当您打开一个新页面时,您都未登录。当localStorage令牌对您进行身份验证时,与cookie的工作方式类似,您将自动登录。当您自动登录时,该钩子也会运行。

难以定义用户如何登录。流星的onLogin钩子触发任何类型的登录方法。

您可以自定义,当你想你的钩子运行,虽然:

Accounts.onLogin(function(info) { 

    if(info.methodName == "createUser") { 

     console.log("This user logged in by signing up"); 


    }else if(info.type == "password") { 

     console.log("This user logged in by using his/her password"); 


    }else if(info.type == "resume") { 

     console.log("This user logged in using a localStorage token"); 
    } 
}); 

所以在这里你可以把这个活动火只有在使用他或她的密码进行登录。甚至当他们注册时。如果用户打开一个使用localStorage标记进行注册的新页面,您可以使用它来排除挂钩。

+0

更新:'info'返回'undefined' –

+0

@DariuszSikorski如果以一种稍微不寻常的方式登录,可能会发生这种情况。在Meteor的问题跟踪器github.com/meteor/meteor上提供一些可重复的代码可能值得提供github票据。 – Akshat

+0

没错,我用'accounts-facebook'来检查这段代码。 –