2017-11-07 4 views
0

Ich habe impersonate Methode in meiner Meteor-Anwendung erstellt, um sich als ein anderer Benutzer anmelden, basierend auf folgendem Artikel: https://dweldon.silvrback.com/impersonating-a-user. Ich habe auch Intercom-Integration (Chat-Widget und Benutzer-Tracking). Ich möchte auf der Client-Seite dieses Intercom-Widget deaktivieren können, um jede Verfolgung von Intercom-Anwendung zu vermeiden, wenn ich als ein anderer Benutzer angemeldet bin (imitieren). Ich habe darüber nachgedacht, im Benutzerprofil die Boolesche Eigenschaft impersonate zu erstellen und sie auf true zu aktualisieren, wenn ich diese Impersonate-Methode für einen Benutzer auslöst. Das Problem ist, dass ich keine Ahnung habe, wie man es auf false setzt, wenn die Impersonate-Methode beendet ist. Laut Artikel können Sie aufhören, sich zu imitieren, wenn Sie den Browser manuell aktualisieren. Könnten Sie mir bitte helfen und den besten Weg finden?Indentifizieren Benutzer in Meteor

Antwort

3

Wir können dies in zwei Teile lösen:

Wenn wir einen Benutzer beginnen Identitätswechsel, zu verfolgen, die die Identitätswechsel. Lassen Sie uns dies tun, indem zuerst die impersonate Methode im Tutorial erstreckt:

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); 

    } 
}); 

Als nächstes werden wir einen neuen Login hören müssen Sie

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; 
    } 
}); 

Jetzt in Ihrem UI (die auf einem Browser refresh passieren sollte) kann Intercom durch die Prüfung auf die Existenz von Meteor.user().profile.impersonating

+0

Hallo Michael, danke für den Vorschlag, aber es scheint ein Problem mit onConnection und Meteor.user() oder Meteor.userId() -Methoden. Beide können nur in Meteor-Methodenaufrufen oder Publikationen aufgerufen werden. Wenn ich diese Methoden in OnConnection-Methode verwende, erhalte ich folgenden Fehler: Ausnahme in OnConnection-Rückruf: Fehler: Meteor.userId kann nur in Methodenaufrufen oder Publikationen aufgerufen werden. – wlodi83

+0

Ah ja, Entschuldigung. Ich habe eine Methode hinzugefügt, um den Identitätswechsel zu löschen. –

+0

Hallo Michael, dieser Ansatz funktioniert immer noch nicht. Die Methoden meteor.user(), this.userId und Meteor.userId() geben in der Methode clearImpersonation null zurück. – wlodi83

Verwandte Themen