首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >拾取meteor.js用户注销

拾取meteor.js用户注销
EN

Stack Overflow用户
提问于 2013-07-29 19:51:51
回答 6查看 7.4K关注 0票数 19

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

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-07-29 22:57:26

使用我创建的user-status包:https://github.com/mizzao/meteor-user-status。这完全是服务器端的。

有关用法,请参阅文档,但您可以将事件处理程序附加到会话注销:

代码语言:javascript
复制
UserStatus.events.on "connectionLogout", (fields) ->
  console.log(fields.userId + " with connection " + fields.connectionId + " logged out")

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

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

票数 7
EN

Stack Overflow用户

发布于 2013-07-29 20:55:53

您可以使用Deps.autorun设置一个自定义处理程序,以观察Meteor.userId()反应性变量的变化。

Meteor.userId() (和Meteor.user())是反应变量,分别返回当前记录在userId中的记录(如果没有记录,则返回null)和Meteor.users集合中相应的用户文档(记录)。

因此,可以通过对这些反应性数据源的修改做出反应来跟踪Meteor应用程序的签入/签出。

client/main.js:

代码语言:javascript
复制
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

代码语言:javascript
复制
Meteor.methods({
    userDisconnected:function(userId){
        check(userId,String);
        var user=Meteor.users.findOne(userId);
        // do something with user (read-write)
    }
});

但请注意,恶意客户端可以使用任何userId调用此服务器方法,因此除非设置了一些验证码,否则不应执行任何关键操作。

票数 9
EN

Stack Overflow用户

发布于 2014-04-01 03:57:18

我们有一个类似的需求,虽然不是很精确。当客户退出时,我们想对他们做一些清理工作。我们是通过劫持Meteor.logout做到的

代码语言:javascript
复制
if (Meteor.isClient) {
  var _logout = Meteor.logout;
  Meteor.logout = function customLogout() {
    // Do your thing here
    _logout.apply(Meteor, arguments);
  }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17923290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档