我在Meteor应用程序中构建了impersonate方法,以便根据以下文章https://dweldon.silvrback.com/impersonating-a-user以其他用户身份登录。我还有内部通信集成(聊天小部件和用户跟踪)。我希望能够在客户端禁用内部通信小部件,以避免在我作为另一个用户(模仿)登录时从内部通信应用程序进行任何跟踪。当我为任何用户触发该模拟方法时,我正在考虑在用户配置文件上创建模拟布尔属性,并将其更新为true。问题是,当模拟方法完成时,我不知道如何将其设置为false。根据文章,您可以在手动刷新浏览器时停止模拟。你能帮助我,找到最好的方法吗?
答案 0 :(得分:3)
我们可以分两部分来解决这个问题:
当我们开始冒充用户时,请跟踪谁冒充用户。让我们首先扩展教程中的impersonate
方法:
Meteor.methods({
impersonate: function(userId) {
check(userId, String);
if (!Meteor.users.findOne(userId))
throw new Meteor.Error(404, 'User not found');
if (!Meteor.user().isAdmin)
throw new Meteor.Error(403, 'Permission denied');
Meteor.users.update(this.userId, { $set: { 'profile.impersonating': userId }});
this.setUserId(userId);
}
});
接下来我们需要监听新的登录(这应该在浏览器刷新时发生)
Meteor.onLogin(() => {
Meteor.call('clearImpersonation', (err, result) => {
if (err) console.log('Error clearing impersonation: ',err);
});
});
Meteor.methods({
clearImpersonation(){
const user = Meteor.users.findOne(this.userId);
if (user && user.impersonating) Meteor.users.update(user._id,{ $unset: 'profile.impersonating' });
return;
}
});
现在,在您的用户界面中,您可以通过检查是否存在Meteor.user().profile.impersonating