Meteor:如果已经登录,则重定向用户

时间:2013-01-14 19:49:15

标签: meteor

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

正如所料,这只是呈现user_index模板而不是更改网址:

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

我想做这样的事情:

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

更新6/4/14:

此问题已不再适用,应改为使用iron-router

5 个答案:

答案 0 :(得分:3)

meteor-router现在是deprecated。而是使用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 - Check logged in status before render

- 或 -

使用accounts-entry包。来自their site

  

确保签署路线用户

     

使用AccountsEntry.signInRequired(this)要求登录用户   一条路线。坚持你的挂钩功能,它将重定向   登录并停止任何渲染。账户输入也跟踪到哪里   用户试图去,并在登录后将其路由回来。

答案 1 :(得分:2)

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

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');

答案 2 :(得分:0)

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

更新1/23/13:

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

答案 3 :(得分:0)

Meteor Router允许您直接访问响应对象,因此您只需执行302重定向即可。以下内容将起作用:

Meteor.Router.add("/test/:_id", (id) ->
  this.response.writeHead '302', {'Location': '/blah/' + id}
)

答案 4 :(得分:0)

您可以使用标准过滤器并将重定向包装在延迟对象中来完成此操作。

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'});
相关问题