登录和注销后Meteor重定向

时间:2015-09-23 14:14:34

标签: meteor iron-router

我有一个Meteor应用程序,我想让用户在登录后和登出后转到仪表板(称为documentsIndex)页面,将它们重定向到Web应用程序的首页。现在我有以下内容:

Iron.Router.hooks.requireLogin = function () {
  if (! Meteor.user()) {
    if (Meteor.loggingIn()) {
      this.render('this.loadingTemplate');
    } else {
      this.render('accessDenied');
    }
  } else {
    this.next();
  }
};

Iron.Router.hooks.goToDashboard = function () {
  if (Meteor.user()) {
    Router.go('documentsIndex');
    this.next();
  } else {
    this.next();
  }
};

Iron.Router.hooks.goToFrontpage= function () {
  if (!Meteor.user()) {
    Router.go('frontpage');
    this.next();
  } else {
    this.next();
  }
};

Router.onBeforeAction('goToDashboard', {except: ['documentNew', 'documentIndex', 'documentShow', 'documentEdit']});
Router.onBeforeAction('goToFrontpage', {except: ['frontpage', 'about']});
Router.onBeforeAction('requireLogin', {except: ['frontpage', 'about']});
Router.onBeforeAction('dataNotFound', {only: ['documentIndex','documentNew', 'documentIndex', 'documentShow', 'documentEdit']});

这样可行,因此当用户登录时,他总是被重定向到DocumentsIndex路由,并且他可以导航后端。当用户退出时,他被重定向到首页并可以浏览前端。

  1. 当我的webapp将来增长时,这很难管理(特别是onBeforeAction中的only和except语句会变得混乱且容易出错)。理想情况下,我想将所有内容组合在requireLogin钩子中。
  2. 稍后我将使用角色(alanning:roles)。我将拥有一个“管理员”角色,一个注册的“客户”角色,然后只有一个只能访问首页的普通访问者。在路由器挂钩中使用此角色的任何想法?一个例子将不仅仅是赞赏。
  3. 注意:我使用的是account-password package

1 个答案:

答案 0 :(得分:4)

你可以使用Meteor的Accounts.onLogin(function () {});钩子而不是铁:路由器(doc)。在此挂钩中,您可以访问Meteor.user()以检查其角色并根据需要更改操作。

同样,您可以使用Meteor.logout()中的回调函数来处理注销时的任何逻辑,如下所示:

Meteor.logout(function(err) {
  // logout logic here
});

如果您希望使用{{> loginButtons}}在某个模板上,即:adminTemplate然后使用下面的代码。我没有测试过这段代码片段,因此可能需要进行微调。

Template.adminTemplate.events({
    'click #login-buttons-logout': function (event) {
        //add your custom logic on top of this
       //the default behaviour should still happen from meteor
    }
});