【发布时间】:2015-10-23 07:49:58
【问题描述】:
我正在流星中构建一个应用程序,其中一个页面只有在用户登录时才对用户可见。该页面的链接位于导航标题中,我希望在用户登录时显示一个登录对话框在没有登录的情况下点击链接。这是显示对话框的代码:
<template name="header">
<a href="#" id="createPost">Create Post</a>
</template>
Template.header.events({
"click #createPost": function (evt) {
evt.preventDefault();
if(!Meteor.user()) {
$('#myModal').modal("show"); //bootstrap modal dialog
}else{
Router.go('/createPost');
}
}
}
但是,问题是 Meteor.user() 检查可以很容易地从浏览器控制台绕过使用Meteor.user = function(){return true;}
我尝试在路由中检查 Meteor.user() 并抛出异常如下:
Router.route('/createPost', function () {
if (!Meteor.user()) {
throw new Meteor.Error(500, 'You are not logged in.');
}
this.render('newbag');
});
但是一旦 Meteor.user 在浏览器中被修改,这个检查也不起作用。 处理这种情况并防止页面显示的最佳方法是什么。
【问题讨论】:
-
您可能不需要阻止用户看到“创建帖子”页面,您只需要阻止用户使用它来创建帖子即可。这意味着您的方法中的授权(或允许/拒绝规则)。即使他们看不到“创建帖子”页面,如果没有对该方法的授权,他们仍然可以通过手动调用该方法来创建帖子。
标签: authentication meteor iron-router