我正在使用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'
此问题已不再适用,应改为使用iron-router。
答案 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'});