vue-meteor-tracker 不获取当前用户

vue-meteor-tracker not fetching current user

我是 Vuejs 和 Meteorjs 的新手,所以如果这些是新手问题或语法错误,请原谅。 我正在尝试使用 vue-meteor-tracker 更新 login\register 按钮以注销,但我无法这样做。 Meteor.user 始终未定义。 我错过了什么?

base.js:

    import { Meteor } from 'meteor/meteor';
export default {
      meteor: 
      {
        $lazy: true,
        $subscribe: 
        {
          'currentUser': function() {
            return Meteor.user();
          },
      'currentUserId': function() {
        return Meteor.userId();
      }
        },
      },
    }

plugins.js

import VueMeteorTracker from 'vue-meteor-tracker';
Vue.use(VueMeteorTracker);

MainNavBar.vue

<li v-if="($parent.currentUserId==null)">
  <router-link v-bind:to="{ name: 'register' }">Register</router-link></li>
<li v-else>
  <router-link v-bind:to="{ name: 'register' }">Log out</router-link></li>
<script>
import base from '../base';
export default 
{  
  extends: base,  
  components:{
  },
  mounted() 
  {
    console.log(this.$parent.currentUserId);
  }
}
</script>

Login.Vue:

<script>
import '../api/methods.js';
import { Meteor } from 'meteor/meteor';
import base from './base';
export default
{
extends: base,
methods: 
  { 
    LoginUserForDomain() 
    {
      Meteor.call('loginUserForDomain', this.user.email, this.user.password, this.user.domain, 
        (error, result) => 
        {
          if(result && result.userId && result.domain) 
          {                 
            Meteor.loginWithPassword(email, password);
            this.$router.push({ name: 'dashboard', params: { domain: result.domain }});                   
            return;
          }
        }
        );
    },
  },
当您未登录时,

Meteor.user() 将始终 return undefined。因此您的登录逻辑不起作用。我不确定你在做什么,但你应该使用 'Meteor.loginWithPassword' 在客户端上登录。 'loginUserForDomain' 有什么用?

我不明白 Meteor.loginWithPassword(email, password); 因为 'email' 和 'password' 都是未定义的(应该是 this.user.email 吗?)。 'this.user.email' console.log 还有什么吗?

根据我在 Meteor forums 中的回复,您是 $subscribingcurrentUsercurrentUserId 而不是将它们定义为反应性数据。此外,您不需要 publish/subscribe 当前用户的 userId,因为它在客户端中始终可用 Meteor.userId().

Meteor.userId() 是一个响应式数据源,您可以像这样使用 vue-meteor-tracker 将其转换为 Vue 响应式 属性:例如:在 App.vue:

<script>
import { Meteor } from 'meteor/meteor';
export default {
  meteor: {
    currentUserId() {
      return Meteor.userId();
    },
  },
}
</script>

然后您可以在任何模板中使用它,例如v-if="$root.currentUserId",或在任何组件的代码中作为 this.$root.currentUserId

在这个简单的示例中,我使用根 Vue 实例作为易于访问的全局数据存储,但使用 dedicated data store, or use Vuex.

更被广泛接受