• 请不要在回答技术问题时复制粘贴 AI 生成的内容
echohn
V2EX  ›  程序员

要不要开发一个不需要用户密码就直接登录用户账号的功能,以测试用户提交的问题?

  •  
  •   echohn · Mar 10, 2020 · 3585 views
    This topic created in 2433 days ago, the information mentioned may be changed or developed.

    最近几次碰见一个情况,就是用户反馈,界面数据显示的不对。

    我从后台数据库查,应该是没有问题的。可能问题出现于前端的一些处理逻辑上。

    现在的问题是,我觉得可能直接登录用户的账号在界面上看,比较好排查问题。

    因为用户密码是密文存储的,我不能动。所以我在想,是不是可以开发一个后台功能,点击就可以切换成该用户登录系统,从而更直观的排查问题。

    我这个想法不一定好,主要是我觉得可能会有安全风险。

    不知道大家有没有遇见过类似的情况,有没有什么好的方式来解决类似的问题?

    18 replies  •  2020-05-23 17:17:52 +08:00
    ebingtel
    ebingtel
    Mar 10, 2020
    1
    登录历史里面 记录用户的 cookies……然后 为所欲为
    oott123
    oott123
    Mar 10, 2020❤️2
    2
    这种功能很常见,叫 Impersonate。比如 gitlab 就有这个
    zhensjoke
    zhensjoke
    Mar 10, 2020
    3
    数据库改密码。。。然后自己登陆测试。。之后再改回用户原来的。

    如果每个用户加密不一样当我没说。。
    marcomarco
    marcomarco
    Mar 10, 2020
    4
    复制一份他的数据,到你的测试账号上看
    lishunan246
    lishunan246
    Mar 10, 2020 via Android
    5
    返回的结果打到日志里,日志没问题就说明是前端的锅。
    ccc825
    ccc825
    Mar 10, 2020
    6
    我这是特意写了前置方法,如果请求带了 user_id 就直接按这个 id 的用户登录来读数据
    yhxx
    yhxx
    Mar 10, 2020
    7
    还有这种操作?
    我一直以为这种事情应该靠监控、日志之类的来查。。。
    imhxc
    imhxc
    Mar 10, 2020
    8
    很正常,大厂一些部门有你说的这种类似的平台。
    mokeyjay
    mokeyjay
    Mar 10, 2020❤️1
    9
    很正常,叫做 ghostlogin 之类的,比如 laravel 就有个包是专门干这个的 https://github.com/viacreative/sudo-su
    但是权限一定得管好,例如要先检测到当前登录的用户是超级管理员,才允许使用 ghostlogin
    learnshare
    learnshare
    Mar 10, 2020❤️1
    10
    通常不建议直接拿用户账户登录,用户账户及功能应该只有用户本人可以操作,这是对用户的尊重
    可以实现一个授权 /邀请功能,用户授权管理员,然后管理员临时变成用户的“影子”登录,并获得用户同样的权限和功能。但执行操作时注意标明是“影子”,而非用户本人

    具体实现就很多样化了,核心是验证管理员身份,以及所有功能和权限都是指定用户的“影子”
    wangxiaoaer
    wangxiaoaer
    Mar 10, 2020 via Android
    11
    典型的 XY 问题,解决办法不是让用户上传个截图就完事了吗?
    sudden
    sudden
    Mar 10, 2020
    12
    这个问题挺可怕的,涉及到隐私了,君子不立危墙之下,建议你不要这样做(领导要求的话当我没说)
    Kr98
    Kr98
    Mar 10, 2020
    13
    楼主可以直接看数据库内容,说明用户本身就没有隐私。
    只是简单测试用途的话,加一个超级密码,登录逻辑里面多加一个判断。
    echohn
    echohn
    OP
    Mar 11, 2020
    14
    @sudden 还好还好,我这里是对 B 的,都是业务数据,涉及到个人隐私的字段,可能只有一个手机号。。。
    imdong
    imdong
    Mar 11, 2020 via iPhone
    15
    之前公司内部业务系统,经常有业务员啥的弄错,不会用,而 admin 并没有操作权限,为了方便调试,加过这样的功能。
    如果是 admin 登录,就添加特殊的 super 标记,然后可以加载任意部门任意用户,并可以任意切换。
    cassiezhang
    cassiezhang
    May 12, 2020
    16
    我们公司是做 saas 服务,也碰到了类似的问题,楼主最终选择什么方案呢?
    cassiezhang
    cassiezhang
    May 12, 2020
    17
    @ccc825 能具体说说么?
    echohn
    echohn
    OP
    May 23, 2020
    18
    @cassiezhang 当时最后选择了自己实现 ghost_login 的方式。

    新增了 ghost_login 的接口,当 superadmin 登录时,可访问该接口,跳过用户登录,直接为所选择要切换的用户颁发新的 token (我这里是 JWT 认证方式)。

    前端收到请求后,覆盖自己的 token,并在本地标记一个 ghost flag,用于页面显示和一些敏感功能的访问限制。

    PS:我在系统配置中增加了开关,打开时才能使用这个接口,用完就关上,也算是一层安全防护吧。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1451 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 15:46 · PVG 23:46 · LAX 07:46 · JFK 10:46
    ♥ Do have faith in what you're doing.