2017-11-07 24 views
0

次の記事に基づいて別のユーザーとしてログインするために、私のMeteorアプリケーションで偽装メソッドを構築しました:https://dweldon.silvrback.com/impersonating-a-user。私はまた、インターコムの統合(チャットウィジェットとユーザ追跡)を持っています。 Intercomアプリケーションからのトラッキングを避けるために、別のユーザー(偽装)としてログオンしているときに、インターコムウィジェットがクライアント側で無効にできるようにしたいと考えています。私は、任意のユーザーの偽装メソッドを起動しているときに、ユーザープロファイルの偽装ブール型プロパティを作成し、それをtrueに更新することを考えていました。問題は、偽装メソッドが終了したときにfalseに設定する方法がわかりません。記事によると、ブラウザを手動で更新すると偽装を停止することができます。私を助けて、最高のアプローチを見つけることができますか?流星の偽装ユーザー

答えて

3

我々は2つの部分でこれを解決することができます:私たちは、ユーザーを偽装起動すると

、誰を偽装している人を追跡します。のは、最初のチュートリアルでimpersonate方法を拡張することでこれをやってみましょう:私たちはあなたのUIに今(ブラウザの更新に起こるべき)新しいログイン

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

    } 
}); 

次のあなた

+0

こんにちはMichealさん、ありがとうございますが、onConnectionとMeteor.user()またはMeteor.userId()メソッドに問題があるようです。どちらもMeteorのメソッド呼び出しまたはパブリケーションでのみ呼び出すことができます。これらのメソッドをonConnectionメソッドで使用すると、次のエラーが発生します。onConnectionコールバックの例外:エラー:Meteor.userIdは、メソッド呼び出しまたはパブリケーションでのみ呼び出すことができます。 – wlodi83

+0

ああ、申し訳ありません。偽装をクリアする方法を追加しました。 –

+0

こんにちはMicheal、このアプローチはまだ動作しません。 Meteor.user()、this.userIdおよびMeteor.userId()メソッドは、clearImpersonationメソッドでnullを返します。 – wlodi83