我知道你说过 accounts:password 包看起来有点“矫枉过正”,但实际上并非如此。您在那里获得的是可插入的 UI(通过 accounts-ui 和其他构建它的包)。我采用的方法是这样的(即使对于支持多用户的应用程序也能很好地工作,因为最终你仍然需要引导你的初始用户)。
首先,我使用帐户:密码和alanning:角色的组合。如果您绝对不需要角色部分,则可能没有它,但在我所有的个人情况下,我发现为各种用户提供多个级别的 ACL 很有用。我们可以就使用角色/组来锁定单个功能进行完整的哲学讨论,但这有点偏离本次讨论的主题。
接下来,您需要引导用户。在您的 /server 文件夹中的某处,您将执行以下操作:
if (Meteor.users.find({}).count() == 0) {
// No users created...create default users
Accounts.createUser({
username: 'myuser',
email: 'myuser@mydomain.com',
password: 'myp4ssw0rd!',
profile: { profileProp: 'propVal` }
});
// Add new user to whatever roles needed
}
我通常在这里做更多的事情,比如检查我的角色是否存在,如果不存在,则在我尝试处理用户之前创建它们,但这里的关键是在服务器启动时执行此操作。
创建用户和角色后,您需要检查/验证应用中的用户/角色。对于菜单项,您可以根据用户是否登录和/或是否具有特定角色来显示/隐藏内容,并且您还应该在需要 ACL 的应用程序路由中进行验证,例如您的管理员路由。此外,还要在所有出版物中使用用户 ID 来限制用户可以看到的数据。不要仅仅依靠隐藏菜单选项...通过默默无闻的安全性是行不通的。
为什么我建议这样做?首先,它真的没有那么多代码。您可以在最多 20 行内完成此操作,并拥有完整的身份验证设置。并且这些代码行的好处大大超过了花费 30 分钟的时间,因为您现在将在您的应用程序中拥有“真正的”用户身份验证,并且如果您将来决定这样做,则可以执行 OAuth 之类的事情。最重要的是,您解锁了无需编写代码的预构建 UI 插件、帮助检查 ACL 的内置和附加方法、按用户锁定数据的能力,并且您不必尝试实施您自己的解决方案。