在我的meteor应用程序上,我有一个登录系统,如果您成功登录或注册,则会将您发送到/ dashboard路径。但是,现在只需输入localhost:3000 / dashboard就可以进入/ dashboard路径。我该如何防止这种情况?
答案 0 :(得分:1)
您可以在挂钩之前使用它来完成此操作。以下是一个包含三个路线的简单示例:index
,signin
和dashboard
:
Router.map(function() {
this.route('index', {
path: '/'
});
this.route('signin');
this.route('dashboard');
});
var mustBeSignedIn = function() {
if (!(Meteor.user() || Meteor.loggingIn())) {
Router.go('signin');
this.stop();
}
};
Router.before(mustBeSignedIn, {except: ['signin']});
在除signin
之外的所有路由之前,我们会将用户重定向回signin
页面,除非他们已登录或正在登录。您可以在{{3}中看到更多示例IR文档的一部分。
答案 1 :(得分:1)
除了使用路由器挂钩或自定义操作过滤路由之外,您还可以确保模板本身仅显示给特权用户:
<template name="secret">
{{#if admin}}
...
{{/if}}
</template>
Handlebars.registerHelper('admin', function(options) {
if(Meteor.user() && Meteor.user().admin) return options.fn(this);
return options.inverse(this);
});
如果要向所有注册用户显示模板,可以使用{{#if currentUser}}
代替,在这种情况下,您无需注册其他帮助。
答案 2 :(得分:1)
您需要在运行每个路由之前检查用户的状态。如果用户未登录(Meteor.userId()返回null),则将用户重定向到登录路由。
Router.before(function() {
if (!Meteor.userId()) {
this.redirect('userLoginRoute');
this.stop();
}
}, {
except: ['userLoginRoute', 'userSignupRoute', 'userNewPasswordRoute']
});
答案 3 :(得分:0)
我相信你可以使用custom actions for iron-router。您可以在自定义操作中检查Meteor.userId()
是否为null
(未登录),并相应地重定向。