5

我正在使用meteor-router/user ,如果他请求/并且他已经登录,我想将用户重定向到。

正如预期的那样,这只是呈现user_index模板而不是更改 URL:

Meteor.Router.add
  '/': -> if Meteor.userId() then 'user_index' else 'index'

我想做这样的事情:

Meteor.Router.add
  '/': -> if Meteor.userId() then Meteor.Router.to '/user' else 'index'

2014 年 6 月 4 日更新:

这个问题不再相关,应该改用iron-router 。

4

5 回答 5

3

流星路由器现已弃用。而是使用可以根据登录状态重定向的Iron-router使用:

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

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

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

var goToDashboard = function(pause) {
  if (Meteor.user()) {
    Router.go('home');
    pause();
  }
};

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

示例取自:Meteor.js - 在渲染前检查登录状态

- 或者 -

使用accounts-entry包。从他们的网站

确保路由的登录用户

使用 AccountsEntry.signInRequired(this) 来要求登录用户的路由。将其粘贴在您的 before 钩子函数中,它将重定向到登录并停止任何渲染。Accounts Entry 还跟踪用户试图去的地方,并在登录后将它们路由回去。

于 2014-06-04T21:11:45.280 回答
2

您正在寻找- 这是来自文档filter的示例:

Meteor.Router.filters({
    'checkLoggedIn': function(page) {
        if (Meteor.loggingIn()) {
            return 'loading';
        } else if (Meteor.user()) {
            return page;
        } else {
            return 'signin';
        }
    }
});

// applies to all pages
Meteor.Router.filter('checkLoggedIn');
于 2013-01-14T20:22:51.727 回答
0

根据这个问题,看起来重定向不是流星路由器的一部分,也可能不是。现在我最终解决了这个问题。如果项目更改以适应重定向,我将更新我的答案,或者其他人可以发布另一个答案。

2013 年 1 月 23 日更新:

我转而使用mini-pages,它可以正确处理这种情况并包含许多很棒的功能,例如布局。

于 2013-01-17T18:51:47.453 回答
0

Meteor Router 允许你直接访问响应对象,所以你可以做一个 302 重定向。像下面这样的东西会起作用:

Meteor.Router.add("/test/:_id", (id) ->
  this.response.writeHead '302', {'Location': '/blah/' + id}
)
于 2013-08-21T16:49:50.870 回答
0

您可以通过使用标准过滤器并将重定向包装在 defer 对象中来做到这一点。

Meteor.Router.filters({
requireLogin: function(page) {
    if(! (Meteor.loggingIn()|| Meteor.user()) ){
        Meteor.defer(function () {
            Meteor.Router.to('/login');
        });
    }
    return page;
}

Meteor.Router.filter('requireLogin', {except: 'login'});
于 2014-03-13T15:59:27.887 回答