当用户退出网站时,有什么方法可以取回吗?当他们这样做时,我需要做一些清理工作。使用内置的meteor.js用户帐户。
我将使用它做一些验证,所以我需要一个不能代表客户端的其他用户触发的解决方案-最好是完全服务器端的东西。
发布于 2013-07-29 22:57:26
使用我创建的user-status
包:https://github.com/mizzao/meteor-user-status。这完全是服务器端的。
有关用法,请参阅文档,但您可以将事件处理程序附加到会话注销:
UserStatus.events.on "connectionLogout", (fields) ->
console.log(fields.userId + " with connection " + fields.connectionId + " logged out")
请注意,用户可以通过多个会话从不同的位置一次登录。这个智能包可以检测到所有这些信息,以及用户是否在线。有关更多信息或实现您自己的方法,请查看代码。
目前,该包不区分浏览器窗口关闭和注销,并将它们视为相同。
发布于 2013-07-29 20:55:53
您可以使用Deps.autorun设置一个自定义处理程序,以观察Meteor.userId()反应性变量的变化。
Meteor.userId() (和Meteor.user())是反应变量,分别返回当前记录在userId中的记录(如果没有记录,则返回null)和Meteor.users集合中相应的用户文档(记录)。
因此,可以通过对这些反应性数据源的修改做出反应来跟踪Meteor应用程序的签入/签出。
client/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/server.js
Meteor.methods({
userDisconnected:function(userId){
check(userId,String);
var user=Meteor.users.findOne(userId);
// do something with user (read-write)
}
});
但请注意,恶意客户端可以使用任何userId调用此服务器方法,因此除非设置了一些验证码,否则不应执行任何关键操作。
发布于 2014-04-01 03:57:18
我们有一个类似的需求,虽然不是很精确。当客户退出时,我们想对他们做一些清理工作。我们是通过劫持Meteor.logout
做到的
if (Meteor.isClient) {
var _logout = Meteor.logout;
Meteor.logout = function customLogout() {
// Do your thing here
_logout.apply(Meteor, arguments);
}
}
https://stackoverflow.com/questions/17923290
复制相似问题