我目前正在开发一款需要用户和管理员的应用。我现在做的是,我在客户端创建了一个管理员帐户,用户名为“admin”,默认密码应该通过accounts-ui进行更改。
我这样做是因为创建了这样的用户:
Accounts.createUser({
username : 'admin',
email : 'test@test.com',
password : 'changethispasswordovertheuserinterface',
profile : { type : 'admin' }
});
在服务器端对我不起作用。这意味着我只需在我的client.js中创建管理员,并使用此代码检查管理员是否已登录。
Template.admin.isAdmin = function () {
var currentUser = Meteor.user();
// Is this hackable?
if (null !== currentUser) {
if ('admin' === currentUser.username) {
return true;
}
}
};
这是解决此问题的最佳方法吗?最重要的是,我的网站是否像这样可以破解(有人可以伪造它)吗?
答案 0 :(得分:3)
是的,这是可以攻击的,可以拉起铬检查员并轻松修改它。或者更快,在Chrome的网络控制台中键入Template.admin.isAdmin = function () { return true; }
之类的内容
如果用户是管理员,最好的方法是仅从服务器端向客户端提供信息。所以这意味着使用Meteor.allow
来确保只有管理用户才能更改数据库,如果从客户端执行操作。
这也取决于您想要使用'isAdmin'的内容。如果是其内容,您可以在服务器端生成html并将其发送到Meteor.methods
中的客户端。目前,模板系统不提供锁定客户端上的UI,具体取决于用户的文档包含的内容。
对于任何管理命令,您可以使用Meteor.call
,此时用户在服务器上进行审查,并在那里执行事务。
答案 1 :(得分:-2)
this thread的答案也有效,而得票最高的答案包含服务器端的代码,Meteor方法调用。