允许管理员用户以其他用户身份登录

Allow admin user to login as other users

有什么方法可以让管理员用户登录其他用户帐户吗?

当前身份验证基于Meteor 帐户

我看到了 但现在根本没用。

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

提前致谢。

您可以使用 alanning:roles 并允许管理员分配任何用户的角色,而不是以用户身份登录,这需要他们的密码,这是完全禁止的基于用户角色的视图。

这需要一个精心设计的角色系统。

此外,您至少可以加载与您要支持的用户关联的文档。

这需要设计良好的文档和数据模型。

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

这将大大减少最终用户手动查看应用程序的需要。

可以通过创建良好的知识库(如 wiki 或视频教程)来减少最常见的最终用户问题。

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

在以用户身份登录之前,以上所有方法都受到青睐。

正如@Jankpunkt 已经提到的那样alanning-roles我可以添加一些你可以使用的东西而无需安装任何外部包。
只需在 users 集合的 profile 对象中保留一个 type 键。然后定义一些类型,如超级管理员 1、管理员 2、一般 3 等。然后通过检查 user.profile.type 键的值来检查特定操作的授权。

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

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

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

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

afaict 执行此操作的唯一方法是以用户身份登录。大概您不想询问用户的密码,因此您有几个选择:

  1. 保存他们的现有密码,(暂时)将其替换为您选择的密码,然后在您模拟完他们的帐户后,恢复他们的现有密码。

您可能不想询问用户的密码,也不需要。您需要做的就是预留 Meteor.user.findOne(userId).services.password.bcrypt,然后将密码重置为您的临时值,稍后再恢复原始 bcrypt 值。

缺点是原始用户在您登录时将无法登录。而且它真的很 hacky。

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

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