流星角色(alanning)。 Roles.userIsInRole return 错误
Meteor-roles (alanning). Roles.userIsInRole return false
我正在使用 meteor-role 包,在 Flowrouter 上重定向时遇到问题。我在导航栏中有一个按钮,可以将用户重定向到主页,这因角色而异。问题是角色包需要一些时间才能准备好并抛出错误。
关于如何解决这个问题的任何想法?提前致谢。
FlowRouter.route( '/', {
name: 'home',
triggersEnter: [() => {
if (Meteor.userId()) {
if (Roles.userIsInRole(Meteor.userId(), 'student')) {
FlowRouter.go('internships_next');
} else if (Roles.userIsInRole(Meteor.userId(), 'organization')) {
FlowRouter.go('user_internships');
} else {
throw new Meteor.Error( 500,
'There was an error processing your request. User id: ' + Meteor.userId()
);
}
}
}],
action() {
mount(LayoutContainer, {
content: <LoginContainer/>,
});
},
});
您需要确保 Roles.subscription.ready() 在重定向之前为真:
FlowRouter.route( '/', {
name: 'home',
action() {
Tracker.autorun(function() {
if (Meteor.userId() && Roles.subscription.ready()) {
if (Roles.userIsInRole(Meteor.userId(), 'student')) {
FlowRouter.go('internships_next');
} else if (Roles.userIsInRole(Meteor.userId(), 'organization')) {
FlowRouter.go('user_internships');
} else {
mount(LayoutContainer, {
content: <LoginContainer/>,
});
}
});
}
},
});
我正在使用 meteor-role 包,在 Flowrouter 上重定向时遇到问题。我在导航栏中有一个按钮,可以将用户重定向到主页,这因角色而异。问题是角色包需要一些时间才能准备好并抛出错误。 关于如何解决这个问题的任何想法?提前致谢。
FlowRouter.route( '/', {
name: 'home',
triggersEnter: [() => {
if (Meteor.userId()) {
if (Roles.userIsInRole(Meteor.userId(), 'student')) {
FlowRouter.go('internships_next');
} else if (Roles.userIsInRole(Meteor.userId(), 'organization')) {
FlowRouter.go('user_internships');
} else {
throw new Meteor.Error( 500,
'There was an error processing your request. User id: ' + Meteor.userId()
);
}
}
}],
action() {
mount(LayoutContainer, {
content: <LoginContainer/>,
});
},
});
您需要确保 Roles.subscription.ready() 在重定向之前为真:
FlowRouter.route( '/', {
name: 'home',
action() {
Tracker.autorun(function() {
if (Meteor.userId() && Roles.subscription.ready()) {
if (Roles.userIsInRole(Meteor.userId(), 'student')) {
FlowRouter.go('internships_next');
} else if (Roles.userIsInRole(Meteor.userId(), 'organization')) {
FlowRouter.go('user_internships');
} else {
mount(LayoutContainer, {
content: <LoginContainer/>,
});
}
});
}
},
});