2017-08-23 5 views
0

Ich füge benutzerdefinierte Felder für mein Benutzer-Account-Erstellung, die Felder zu veröffentlichen, und auf die jeweilige Veröffentlichung abonniert, und doch meine Meteor.user().customField nicht auf der Client-Seite zugänglich sein .Meteor.user() zeigt keine benutzerdefinierten Felder auf dem Client

Also in meinem imports/api/users/users.js füge ich die folgenden Ausschnitt:

import { Random } from 'meteor/random' 
Accounts.onCreateUser((options, user) => { 
    const cond = assignUserCondition(); 
    user.enterTime= new Date(); 
    user.page = null; 
    user.passedQuiz= false; 
    user.exitStatus=null; 
    user.quizAttempts= 0; 
    user.condition= cond; 
    user.avatar= null; 
    user.score= 0; 
    user.bonus= 0; 
    user.lobbyTimeout= LOBBY_TIMEOUT; 
    user.gameId= null; 
    user.condInfo = {name: cond, 
     groupSize: (cond+'GROUPS_SIZE').split('.').reduce((o, i) => o[i], CONDITIONS_SETTINGS), 
     bonusConversion: (cond+'BONUS_CONVERSION').split('.').reduce((o, i) => o[i], CONDITIONS_SETTINGS), 
     N_ROUNDS: (cond+'N_ROUNDS').split('.').reduce((o, i) => o[i], CONDITIONS_SETTINGS), 
    }; 
    return user; 
}); 

Dann von meteor mongo ich überprüft, die Nutzern die neuen benutzerdefinierten Felder zu tun, die ich hinzugefügt. Nun, in imports/api/users/server/publications.js ich folgende Schnipsel haben:

import {Meteor} from 'meteor/meteor' 
Meteor.publish('users.user', function(currentUser) { 
    let user= Meteor.users.find({_id:currentUser}, { 
     fields: { 
      _id: 1, 
      enterTime: 1, 
      page: 1, 
      passedQuiz: 1, 
      exitStatus: 1, 
      quizAttempts:1, 
      condition:1, 
      avatar: 1, 
      score:1, 
      bonus: 1, 
      lobbyTimeout: 1, 
      gameId: 1, 
      conditionInfo: 1 
     } 
    }); 
    if (user) { 
     return user; 
    } 
    return this.ready(); 
}); 

Auch in meinem imports/startup/client/index.js habe ich das Abonnement:

Tracker.autorun(function(){ 
    Meteor.subscribe('users.user'); 
}); 

jedoch auf der Client-Seite, console.log(Meteor.user()) zeigt nur die _id und username ohne meiner benutzerdefinierten Felder.

Antwort

4

Sie haben den Parameter currentUser nicht vom Client in Ihrer subscribe übergeben. Doch das ist noch eine strenge no-no, da der Client nicht vertrauenswürdig ist (jemand einfach eine andere Benutzer-_id auf Ihre Methode schicken könnte). Schreiben Sie Ihre Publikation wie folgt um:

import {Meteor} from 'meteor/meteor' 
Meteor.publish('users.user', function() { 
    if (this.userId) { 
    return Meteor.users.find(this.userId, { 
     fields: { 
     _id: 1, 
     enterTime: 1, 
     page: 1, 
     passedQuiz: 1, 
     exitStatus: 1, 
     quizAttempts:1, 
     condition:1, 
     avatar: 1, 
     score:1, 
     bonus: 1, 
     lobbyTimeout: 1, 
     gameId: 1, 
     conditionInfo: 1 
     } 
    }); 
    } 
    return this.ready(); 
}); 
+0

Ok, das behebt es – amaatouq

Verwandte Themen