前言

最近由于毕设需要Dify,初始化的时候输入的密码忘记保存了,过了一周左右需要我重新登录尝试了半天还是选择了重置密码。去网上搜寻了老半天的方法大多是”改 .env 文件”或”重置数据库”,但实际操作中发现这些对于最新版本的dify(1.13.0)并不通用。这里把解决方法记录下来,希望能帮到遇到同样问题的人。

本文部分内容参考了 CSDN 博客 的方法,并结合实际环境做了补充和修正。

环境说明

  • Dify 版本:1.13.0(通过源码 + docker-compose 部署)
  • 部署路径:~/dify/docker/
  • 操作系统:Ubuntu/Debian

方法一:Flask 命令重置密码(只在1.13.0版本的dify尝试过并且生效)

这是最安全的方法,不会影响任何现有数据。

前提条件

需要当前用户有 Docker 权限。如果执行 docker 命令报错那就

1
sudo 

第一步:确认管理员邮箱

这一步很关键。如果不知道管理员邮箱,重置密码会提示 Account not found

进入 PostgreSQL 数据库查询:

1
sudo docker exec -it docker-db_postgres-1 psql -U postgres -d dify

进入后执行:

1
SELECT id, email, status FROM accounts;

会输出类似:

1
2
3
4
                  id                  |       email       | status
--------------------------------------+-------------------+--------
| email@eamil.com | active
(1 row)

记下这里的邮箱地址,这就是管理员账号(本人猪鼻尝试了半天结果发现是邮箱输错了)。

注意:Dify 1.13.0 版本的 accounts 表没有 roleis_admin 字段。第一个注册的用户就是系统 Owner(超级管理员)。

查完后输入 \q 退出数据库。

第二步:执行重置密码

1
sudo docker exec -it docker-api-1 flask reset-password

按提示输入管理员邮箱和新密码:

1
2
3
Email: eamil@eamil.com
New password: 你的新密码
Password confirm: 再次输入新密码

看到类似 Password reset successfully 的提示就说明成功了。

如果 flask 命令不存在

有些版本的容器里可能没有 flask 命令,可以进入容器内执行:

1
2
sudo docker exec -it docker-api-1 bash
flask reset-password

方法二:修改 .env 文件(旧版本适用,csdn提供方法但是我尝试了发现不适用)

如果你的 Dify 是较旧的版本,且 .env 文件中有以下配置:

1
2
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=your_password

注意: 我一开始就准备用此方法CSDN里面看到的,但是我当我打开.env文件去查询这2个未找到只找到

1
2
COUCHBASE_CONNECTION_STRING=...
COUCHBASE_USER=...

就不敢直接修改了直接选择了方法1进行重新设置密码。

可以注释或删除这两行,然后重建容器:

1
2
3
4
cd ~/dify/docker
sudo docker-compose down
sudo docker-compose rm -f
sudo docker-compose up -d

常见问题

Q: flask reset-password 提示 Account not found

说明输入的邮箱和数据库中的管理员邮箱不一致。参考方法一的第一步,先查数据库确认正确的邮箱。

Q: .env 文件在哪?

如果你是源码部署(目录下有 api/web/docker/ 等文件夹),.env 文件在 docker/ 子目录下,不是项目根目录:

1
2
cd ~/dify/docker
ls -a | grep .env

总结

方法 是否丢失数据 适用场景
flask reset-password 推荐首选,适用于 Dify 1.13.0 及以上版本
修改 .env 旧版本 Dify,新版本可能不适用