要不要开发一个不需要用户密码就直接登录用户账号的功能,以测试用户提交的问题? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
echohn

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

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

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

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

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

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

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

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

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

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

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

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

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

    PS:我在系统配置中增加了开关,打开时才能使用这个接口,用完就关上,也算是一层安全防护吧。
    About     Help     Advertise     Blog     API     FAQ     Solana     876 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 53ms UTC 19:35 PVG 03:35 LAX 12:35 JFK 15:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86