允许管理员用户以其他用户身份登录
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 执行此操作的唯一方法是以用户身份登录。大概您不想询问用户的密码,因此您有几个选择:
- 保存他们的现有密码,(暂时)将其替换为您选择的密码,然后在您模拟完他们的帐户后,恢复他们的现有密码。
您可能不想询问用户的密码,也不需要。您需要做的就是预留 Meteor.user.findOne(userId).services.password.bcrypt
,然后将密码重置为您的临时值,稍后再恢复原始 bcrypt
值。
缺点是原始用户在您登录时将无法登录。而且它真的很 hacky。
扩展 Meteor 的 Accounts
包,以更优雅的方式提供模拟功能。
您也可以看看 validateLoginAttempt。文档不清楚是否可以用成功的登录尝试覆盖失败的登录尝试,但如果可以的话,那将提供另一种途径来解决您的问题。
有什么方法可以让管理员用户登录其他用户帐户吗?
当前身份验证基于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 执行此操作的唯一方法是以用户身份登录。大概您不想询问用户的密码,因此您有几个选择:
- 保存他们的现有密码,(暂时)将其替换为您选择的密码,然后在您模拟完他们的帐户后,恢复他们的现有密码。
您可能不想询问用户的密码,也不需要。您需要做的就是预留 Meteor.user.findOne(userId).services.password.bcrypt
,然后将密码重置为您的临时值,稍后再恢复原始 bcrypt
值。
缺点是原始用户在您登录时将无法登录。而且它真的很 hacky。
扩展 Meteor 的
Accounts
包,以更优雅的方式提供模拟功能。您也可以看看 validateLoginAttempt。文档不清楚是否可以用成功的登录尝试覆盖失败的登录尝试,但如果可以的话,那将提供另一种途径来解决您的问题。