使用Meteor / Iron Router重定向登录Facebook的用户的最佳方法是什么?

时间:2015-04-17 05:04:43

标签: facebook cordova redirect meteor iron-router

我是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)

1 个答案:

答案 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.
  }
})