2017-05-15 1 views
0

J'essaye de bloquer l'utilisateur qui ouvre plus d'un navigateur connecté.comment réactiver le champ Meteor.user

J'ai un objet Meteor.user() peuplé comme suit lorsqu'un utilisateur se inscrit:

{ 
    "_id" : "uSS2RqZnnFwui67wk", 
    "createdAt" : ISODate("2017-05-15T07:28:10.546Z"), 
    "services" : { 
     "password" : { 
      "bcrypt" : "$2a$10$DPgA59Gmob4ajzjYZyh5auoHRUyQuF1/7M0KaWz.nzW0mIEqzlDK6" 
     }, 
     "resume" : { 
      "loginTokens" : [ 
       { 
        "when" : ISODate("2017-05-15T13:42:29.322Z"), 
        "hashedToken" : "tkoQnweSQhgRKGzaJTAkUU3/Ljd3p4wrBJfrRvRRlcY=" 
       } 
      ] 
     } 
    }, 
    "username" : "johndoe", 
    "emails" : [ 
     { 
      "address" : "[email protected]", 
      "verified" : false 
     } 
    ], 
    "profile" : { 
     "name" : "John Doe", 
     "mobile" : "9637637941", 
     "email" : "[email protected]", 
     "address" : "kfasd, asdas,d as dsad", 
     "gender" : "M", 
     "state" : "Uttar Pradesh", 
     "customerType" : "CLIENT", 
     "isBlocked" : true 
    }, 
    "status" : { 
     "online" : true, 
     "lastLogin" : { 
      "date" : ISODate("2017-05-15T14:12:02.094Z"), 
      "ipAddr" : "127.0.0.1", 
      "userAgent" : "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0" 
     }, 
     "idle" : false 
    } 
} 

Se référant au code ci-dessus, je suis en train de mettre à jour une interface utilisateur basée sur le statut user.profile.isBlocked*.

Mon ui.html est comme ci-dessous:

<template name="App_watch"> 
    {{#if isBlocked}} 
     User Has been Blocked. 
    {{else}} 
     User has Access. 
    {{/if}} 
</template> 

Mes UI.js est comme ci-dessous:

import { Meteor } from 'meteor/meteor'; 
import './UI.html'; 

Template.App_watch.helpers({ 
    isBlocked() { 
    user = Meteor.users.find({_id: Meteor.userId}); 
    return user.profile.isBlocked; 
    } 
}); 

Dans le code ci-dessous je surveille simplement s'il y a plus que 1 navigateurs s'ouvrent avec la même connexion. Si OUI alors bloquez l'utilisateur, sinon Débloquez l'utilisateur.

import './fixtures.js'; 
import './register-api.js'; 

UserStatus.events.on("connectionLogin", function(fields) { 
    var count = UserStatus.connections.find({userId : fields.userId}).count(); 
    if(count > 1) { //Block 
    Meteor.users.update({_id: Meteor.userId()}, {$set: {"profile.isBlocked": true}}); 
    } else { // Unblock 
    Meteor.users.update({_id: Meteor.userId()}, {$set: {"profile.isBlocked": false}}); 
    } 
}); 

Énoncé du problème:

Je veux faire la variable isBlocked réactive comme lorsque les changements de drapeau isBlocked pour l'utilisateur. Actuellement, il est statique et doit être actualisé.

Répondre

3

Essayez:

Template.App_watch.helpers({ 
    isBlocked() { 
    return Meteor.user() && Meteor.user().profile && Meteor.user().profile.isBlocked; 
    } 
}); 

Si vous êtes à la recherche d'un seul objet, vous devez utiliser .findOne() au lieu de .find() comme celui-ci renvoie un curseur. C'est aussi Meteor.userId() pas Meteor.userId

+1

mise à jour pour vérification nulle! – zim