redash重置密码BUG解决

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 = '{}'"

-U指定postgres用户 -c 接命令
由于在redash的容器中,切换到postgres用户是无法创建文件的,而且我们需要为创建的脚本赋予执行权限并把拥有者切换到postgres以避免执行权限问题。
命令如下:

chown postgres ./脚本.sh
chmod 777 ./脚本.sh

接下来切换到宿主机,执行docker exec -it 容器ID /bin/sh 脚本.sh

然后进入容器查看users表的detail字段,你会发现其已被更改为json类型的"{}"

之后你便可以使用重置密码功能。

但是当你重置密码之后,其字段又会变为false,又会触发此BUG。
我的解决方法是将宿主机执行的命令放到azkaban上,进行定时执行,时间间隔间隔的短一点。
方法愚笨,仅供参考。
以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值