用户刚刚登录或刚刚注销后如何重定向

时间:2014-04-06 21:44:19

标签: meteor iron-router

似乎Deps.autorun是要走的路,但是Router.go似乎不能在Deps.autorun中工作。

3 个答案:

答案 0 :(得分:17)

以下是三个路线的示例:indexsignindashboard

Router.configure({layoutTemplate: 'layout'});

Router.map(function() {
  this.route('index', {path: '/'});
  this.route('signin');
  this.route('dashboard');
});

var mustBeSignedIn = function(pause) {
  if (!(Meteor.user() || Meteor.loggingIn())) {
    Router.go('signin');
  } else {
    this.next();
  }
};

var goToDashboard = function(pause) {
  if (Meteor.user()) {
    Router.go('dashboard');
  } else {
    this.next();
  }
};

Router.onBeforeAction(mustBeSignedIn, {except: ['signin']});
Router.onBeforeAction(goToDashboard, {only: ['index']});

如果用户在index页面上且她已登录,则她将自动路由到dashboard页面。在signin以外的任何页面上,如果用户未登录,她将被路由到signin页面。 onBeforeAction是被动的,因此如果用户登录或退出,将立即强制执行这些规则。

当然你的路线会有所不同,但希望这个例子说明了一种方法可以使用铁路由器。

另请参阅using hooksiron-router guide部分。

答案 1 :(得分:7)

上面的一些事情似乎已经过时了。以下是我现在的工作方式:

Router.configure({
    layoutTemplate: 'Layout'
});

Router.map(function() {
    this.route('index', {path: '/'});
    this.route('login');
    this.route('home');
});

var mustBeSignedIn = function() {
    if (!(Meteor.user() || Meteor.loggingIn())) {
        Router.go('login');
    } else {
        this.next();
    }
};
var goHome = function() {
    if (Meteor.user()) {
        Router.go('home');
    } else {
        this.next();
    }
};

Router.onBeforeAction(mustBeSignedIn, {except: ['login']});
Router.onBeforeAction(goHome, {only: ['index', 'login']});

答案 2 :(得分:4)

var mustBeSignedIn = function(pause) {
  if (!(Meteor.user() || Meteor.loggingIn())) {
    Router.go('signin');
  } else {
    this.next();
  }
};

var goToDashboard = function(pause) {
  if (Meteor.user()) {
    Router.go('dashboard');
  } else {
    this.next();
  }
};

仅供参考,暂停()现在不支持,只需替换为this.next()