您可以使用 Deps.autorun 设置自定义处理程序,观察 Meteor.userId() 反应变量的变化。
Meteor.userId()(和 Meteor.user())是反应变量,分别返回当前登录的 userId(如果没有则为 null)和 Meteor.users 集合中相应的用户文档(记录)。
因此,人们可以通过对那些响应式数据源的修改做出反应来跟踪 Meteor 应用程序的登录/退出。
客户端/main.js:
var lastUser=null;
Meteor.startup(function(){
Deps.autorun(function(){
var userId=Meteor.userId();
if(userId){
console.log(userId+" connected");
// do something with Meteor.user()
}
else if(lastUser){
console.log(lastUser._id+" disconnected");
// can't use Meteor.user() anymore
// do something with lastUser (read-only !)
Meteor.call("userDisconnected",lastUser._id);
}
lastUser=Meteor.user();
});
});
在此代码示例中,我设置了一个源文件局部变量 (lastUser) 以跟踪上次登录应用程序的用户。
然后在 Meteor.startup 中,我使用 Deps.autorun 设置响应式上下文(只要访问的响应式数据源之一被修改,就会重新执行代码)。
这种反应式上下文跟踪 Meteor.userId() 的变化并做出相应的反应。
在断开代码中,您不能使用 Meteor.user() 但如果您想访问最后一个用户文档,您可以使用 lastUser 变量。
如果要在注销后修改文档,可以调用带有 lastUser._id 作为参数的服务器方法。
服务器/server.js
Meteor.methods({
userDisconnected:function(userId){
check(userId,String);
var user=Meteor.users.findOne(userId);
// do something with user (read-write)
}
});
请注意,尽管恶意客户端可以使用任何 userId 调用此服务器方法,因此除非设置一些验证码,否则您不应执行任何关键操作。