为什么 Meteor.user 和 Meteor.userId 不同?
Why Meteor.user and Meteor.userId differ?
我有拦截器:
Router.onBeforeAction(function() {
if (!Meteor.userId()) {
console.log("lets login");
Router.go("login");
} else {
this.next();
}
}, {
except: ['login', 'signup']
});
它工作得很好,直到我将 !Meteor.userId() 替换为 Meteor.user()。似乎 .user 在刷新页面时未定义并将其重定向到我的登录页面。我的登录路由器也验证了 .user,这里是正确的。
为什么会有这种差异?
没错,Meteor.userId() returns id 而 Meteor.user() returns 对象。
然而,由于异步问题,返回一个对象 (Meteor.user()) 比返回一个 ID 花费更多的时间,到脚本运行时检查 if (!Meteor.user()) {...}, Meteor.user() 尚未处理并且还没回来!
因此,有几种方法可以解决该异步问题(例如,在 Meteor/React 应用程序中,我们可能有类似 subscribe,然后等待直到 handle ready)
我有拦截器:
Router.onBeforeAction(function() {
if (!Meteor.userId()) {
console.log("lets login");
Router.go("login");
} else {
this.next();
}
}, {
except: ['login', 'signup']
});
它工作得很好,直到我将 !Meteor.userId() 替换为 Meteor.user()。似乎 .user 在刷新页面时未定义并将其重定向到我的登录页面。我的登录路由器也验证了 .user,这里是正确的。
为什么会有这种差异?
没错,Meteor.userId() returns id 而 Meteor.user() returns 对象。
然而,由于异步问题,返回一个对象 (Meteor.user()) 比返回一个 ID 花费更多的时间,到脚本运行时检查 if (!Meteor.user()) {...}, Meteor.user() 尚未处理并且还没回来!
因此,有几种方法可以解决该异步问题(例如,在 Meteor/React 应用程序中,我们可能有类似 subscribe,然后等待直到 handle ready)