Eva*_*les 19 javascript meteor
当用户退出网站时,有什么方法可以提取吗?当他们这样做时,我需要做一些清理工作.使用内置的meteor.js用户帐户.
我将使用它进行一些验证,因此我需要一个不能代表客户端的其他用户触发的解决方案 - 最好是完全服务器端的东西.
您可以使用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();
});
});
Run Code Online (Sandbox Code Playgroud)
在此代码示例中,我正在设置源文件本地变量(lastUser)以跟踪应用程序中记录的最后一个用户.然后在Meteor.startup中,我使用Deps.autorun来设置一个反应式上下文(每当访问一个被访问的被动数据源时将重新执行的代码).此反应上下文跟踪Meteor.userId()变体并作出相应的反应.
在deconnection代码中,您不能使用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)
}
});
Run Code Online (Sandbox Code Playgroud)
请注意,恶意客户端可以与任何userId一起调用此服务器方法,因此除非您设置了一些验证码,否则不应该做任何重要事情.
使用user-status我创建的包:https://github.com/mizzao/meteor-user-status.这完全是服务器端的.
请参阅文档以了解用法,但您可以将事件处理程序附加到会话注销:
UserStatus.events.on "connectionLogout", (fields) ->
console.log(fields.userId + " with connection " + fields.connectionId + " logged out")
Run Code Online (Sandbox Code Playgroud)
请注意,用户可以使用多个会话一次从不同位置登录.这个智能包可以检测所有这些以及用户是否在线.有关更多信息或实现自己的方法,请查看代码.
目前,该软件包不区分浏览器窗口关闭和注销,并将它们视为相同.
我们有类似的,但不是确切的要求.我们想在客户退出时对客户进行一些清理.我们是通过劫持来做到的Meteor.logout:
if (Meteor.isClient) {
var _logout = Meteor.logout;
Meteor.logout = function customLogout() {
// Do your thing here
_logout.apply(Meteor, arguments);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7077 次 |
| 最近记录: |