允许admin用户以其他用户身份登录

时间:2018-04-14 06:58:10

标签: session meteor meteor-accounts

有没有办法登录管理员用户的其他用户帐户?

目前基于 Meteor帐户

的身份验证

我看到this post但现在根本没有工作。

该功能对我们很重要,因为当用户在系统中遇到问题时,管理员需要通过模拟用户帐户来查看它。

提前致谢。

3 个答案:

答案 0 :(得分:1)

您可以使用alanning:roles而不是以用户身份登录,这需要他们的密码,而且总是禁止使用,而是允许管理员分配任何用户的角色,以便根据需要绘制视图用户的角色。

这需要一个设计良好的角色系统。

作为一个优点,您至少可以加载与您想要支持的用户相关联的文档。

这需要精心设计的文档和数据模型。

但一般来说,你应该专注于为组件编写好的测试(测试驱动开发)作为单元测试,集成测试和UI测试。

这将减少手动查看最终用户的需求。

通过创建像wiki或视频教程这样的良好知识库,可以减少最常见的最终用户问题。

即使最终用户端出现错误,我宁愿尝试实现一个设计良好的错误日志,允许用户自动创建错误的票证,其中也包括错误堆栈。

在登录用户之前,所有上述方法都会受到青睐。

答案 1 :(得分:1)

由于@Jankpunkt已经提到alanning-roles我可以添加一些你可以使用而无需安装任何外部包的东西。
只需在type集合的profile对象中保留users密钥即可。然后定义一些类型,如1为super-admin,2为admin,3为general等。然后通过检查user.profile.type键的值来检查特定操作的授权。

警告:确保您正在检查服务器端的类型。默认情况下,profile字段可从客户端写入,因此如果要在配置文件对象中放置type字段,请确保您不允许用户在客户端修改users集合。 以下是如何限制用户集合中的客户端更新:

Meteor.users.deny({
  update() { return true; }
});

在此处阅读有关角色和权限的更多信息:  https://guide.meteor.com/accounts.html#roles-and-permissions

答案 2 :(得分:1)

您似乎想要模仿用户。这意味着您希望Meteor.userId(或this.userId取决于上下文)反映客户端和服务器上特定用户的_id

afaict执行此操作的唯一方法是以用户身份登录。大概你不想要求用户输入密码,所以你有几个选择:

  1. 保存现有密码,用您选择的密码替换(暂时),然后在模拟完帐户后,恢复现有密码。
  2. 您可能不想要求用户输入密码而您不需要。您需要做的就是预留Meteor.user.findOne(userId).services.password.bcrypt,然后将密码重置为临时值,然后稍后恢复原始的bcrypt值。

    缺点是原始用户在您登录时无法登录。再加上它非常黑客。

    1. 扩展Meteor的Accounts软件包,以更优雅的方式提供模拟功能。

    2. 您也可以查看validateLoginAttempt。文档不清楚失败的登录尝试是否可以被一个成功的登录尝试覆盖,但是如果它可以提供另一个途径来解决您的问题。