我正在使用Meteor构建一个应用程序。我想在每次用户登录到我的应用程序时创建一个新的Cart 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());
});
是的,这是真的。
每次打开一个新页面,您都没有登录。当localStorage令牌对您进行身份验证时(类似于cookie的验证方式),您将自动登录。当你自动登录时,这个钩子也会运行。
很难定义用户如何登录。Meteor的onLogin钩子在任何类型的login方法上触发。
你可以自定义何时运行钩子:
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令牌注册的新页面时,你可以使用它来避免运行钩子。