无论用户是否登录,当我在Meteor.startup()
中调用Meteor.user()
时,用户始终是undefined
(未登录)。
如果页面加载后未登录,我想执行一个操作(将用户重定向到必须登录的外部url)。问题是,如果他登录了,页面只会在某个时间点(当然是以毫秒为单位)知道它。我可以用Tracker.autorun
捕获最终的登录用户,但我想现在执行操作(当用户总是没有登录时),并且我只知道之后是否需要执行操作(可能用户已经登录)。
如何在流星中做到这一点?
编辑
我最终完成了以下工作:
Tracker.autorun(() => {
if (!Meteor.user() && !Meteor.loggingIn() && Accounts.loginServicesConfigured()) {
Meteor.loginWithTwitter();
}
});
尝试Meteor.loggingIn()
从文档
if a login method (such as Meteor.loginWithPassword, Meteor.loginWithFacebook, or Accounts.createUser) is currently in progress. A reactive data source.
问题的一个解决方案是使用meteorhacks:fast-render
包。它的包含导致初始数据集与应用程序代码一起发送,因此用户信息在startup
方法中立即可用。
如果你不想使用该软件包,你可以随时重组你的应用程序,这样你所说的"现在"总是在加载初始数据后发生。例如,您可以将此检查移动到根控制器的onBeforeAction
回调。假设您也订阅了根控制器中的用户数据,那么它将始终在渲染任何模板之前运行。