我是Meteor的新手,正在构建移动应用程序(使用Cordova)。我的用户通过Facebook登录。用户登录后,应用程序必须重定向到下一页(映射到'/ hotelSelect')。
此外,如果用户稍后关闭并打开应用程序,如果已经登录,他/她必须同样被重定向到'/ hotelSelect'并跳过登录。 我使用过Router.go,但是当应用程序关闭并重新打开时,您可以看到登录页面一秒钟。
这很明显,因为Router.go在客户端工作。 执行此类服务器端重定向的最佳方法是什么?我一直在网上寻找答案,但一直没能找到一个好的答案。谢谢你的吨: - )
Accounts.onLogin(function(){
if(Meteor.isClient) { // only works on client
Router.go("/hotelSelect"); //check if logged in and reroute.
}
})
Router.onBeforeAction(function() {
if (!Meteor.userId()) {
this.render("login");
} else {
this.next();
}
});
Router.map(function(){
this.route('login',{path:'/'});
this.route('currentlyAt',{path:'/currentlyAt'});
this.route('hotelSelect',{path:'/hotelSelect'});
this.route('reqHistory',{path:'/reqHistory'});
this.route('preCheckin',{path:'/preCheckin'});
this.route('hotelServices',{path:'/hotelServices'});
this.route('roomNumber',{path:'/roomNumber'});
})
[编辑:之前,我的服务器抛出了以下异常,因为我没有在“isClient”块中使用Router.go,正如Adnan在下面提到的那样(谢谢!)。我已经解决了这个问题,但我上面的真正问题还有待解决!]
Exception in onLogin callback: TypeError: Object function router(req, res, next) {
//XXX this assumes no other routers on the parent stack which we should probably fix
router.dispatch(req.url, {
request: req,
response: res
}, next);
} has no method 'go'
at Router.map.route.path (app\lib\router.js:9:9)
答案 0 :(得分:2)
编辑: 我无法理解为什么人们想要自动重定向“/”。流星的方式是不强调位置栏或显示的网址。这是重要的显示。
因此,对于已登录的用户,您只需根据登录状态呈现正确的模板,即可将“/”转换为hotelsearch。 IMO,重定向是针对静态html网站。应用不应使用它。
此外,根据它的声音,您正在强制登录用户到特定路线。想象一下那些一直试图访问“/”并因为自动重定向而烦恼的人的困惑。它违背了让用户知道发生了什么的目标。
Router.go是一种客户端方法。修改代码应修复服务器错误:
Accounts.onLogin(function(){
if(Meteor.isClient) { // only works on client
Router.go("/hotelSelect"); //check if logged in and reroute.
}
})