我正在编写我的应用程序的一部分,它要求用户具有“操作员”角色。我正在 FlowRouter 的triggersEnter
函数中检查这一点。我希望向没有操作员角色的用户显示受限访问页面。
我使用 FlowRouter、Roles 和 brettle:accounts-deluxe,它会自动以访客身份登录每个访客。
这是我的代码,routes.js
:
FlowRouter.route('/switchboard', {
name: 'switchboard',
triggersEnter: [function (context, redirect, stop) {
if (!Roles.userIsInRole(Meteor.userId(), ['operator'])) {
BlazeLayout.render('main', {
content: 'restrictedAccess'
});
stop();
}
}],
action: function () {
BlazeLayout.render('main', {
content: 'switchboard'
});
}
});
本地主机上的一切都按预期工作,但是当应用程序使用mup
, 在服务器上运行时triggersEnter
,运行时Meteor.user()
是undefined
(Meteor.userId() 返回 ok),并且Roles.userIsInRole
调用的结果是false
,尽管在数据库中查找很清楚用户具有操作员角色。
我认为在运行 triggersEnter 时用户订阅不可用,这意味着用户集合未在客户端上发布。我有这种感觉,因为如果我通过单击链接访问路由,则 userIsInRole 结果是可以的,但是如果我刷新页面,我会遇到所描述的问题。我想知道为什么这只发生在服务器上,我该如何解决。