拿起meteor.js用户注销

Eva*_*les 19 javascript meteor

当用户退出网站时,有什么方法可以提取吗?当他们这样做时,我需要做一些清理工作.使用内置的meteor.js用户帐户.

我将使用它进行一些验证,因此我需要一个不能代表客户端的其他用户触发的解决方案 - 最好是完全服务器端的东西.

sai*_*unt 9

您可以使用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一起调用此服务器方法,因此除非您设置了一些验证码,否则不应该做任何重要事情.


And*_*Mao 7

使用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)

请注意,用户可以使用多个会话一次从不同位置登录.这个智能包可以检测所有这些以及用户是否在线.有关更多信息或实现自己的方法,请查看代码.

目前,该软件包不区分浏览器窗口关闭和注销,并将它们视为相同.


u26*_*622 6

我们有类似的,但不是确切的要求.我们想在客户退出时对客户进行一些清理.我们是通过劫持来做到的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)