redash邮件重置密码BUG解决方法
redash是一个比较少见的开源BI工具,由于其web框架使用的是Flask,所以其源码结构和内容还是相对容易看懂。今天在测试其重置密码功能时发现一个BUG,使得我在点击重置密码邮件中的链接时,总是会出现以下提示:
属实烦人。意思大概是你已经接受了邀请,请尝试重置您的密码。WTF???难道我现在不是在重置我的密码吗??但是尝试管理员账号之后发现管理员账号并不会触发这个BUG(管理员创建账号时并不需要被邀请)。想来必定是有一个字段记录了我在创建账号时候已经被邀请,继而阻止了我重置密码。
查看源码之后,我们在models的users模型中找到了该字段:
is_invitation_pending = json_cast_property(db.Boolean(True), 'details', 'is_invitation_pending', default=False)
找出重置密码所调用的函数来跳过检查这个字段的值固然是最靠谱、最简单的做法,但是小弟属实无能,其代码是在前端用js框架写的,实在是无从下手,于是我想到更改数据库值的方法来实现BUG的解决。
redash的数据库使用的是postgres,其基本语法与mysql出入不大,但是进入数据库还是比较新奇的,需要切换用户然后执行psql。postgres依然可以在命令行通过-c的形式直接执行psql语句。由于我使用docker启动redash,所以我进入docker容器,为其写了一个脚本,大体内容如下:
psql -U postgres -c "update users set details = '{}'"
chown postgres ./脚本.sh chmod 777 ./脚本.sh
接下来切换到宿主机,执行docker exec -it 容器ID /bin/sh 脚本.sh
然后进入容器查看users表的detail字段,你会发现其已被更改为json类型的”{}”
之后你便可以使用重置密码功能。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210920.html原文链接:https://javaforall.net
