自託管 n8n:重設現有用戶密碼的最安全方法(不刪除帳戶/資料)

描述問題/錯誤/問題

我在 Google Cloud VM 上透過 Coolify 在 Docker 中執行自託管的 n8n 實例。

我可以存取 n8n 登入頁面,但無法登入。「忘記密碼」頁面顯示未設定電子郵件,因此無法傳送重設電子郵件。

重要事項:我不想重設使用者管理或建立新帳戶,如果這樣會刪除/替換目前的使用者。我想保留相同的現有帳戶,並保留所有工作流程、認證和資料。

我確認現有使用者存在於 SQLite 資料庫中:

adammzannar2009@gmail.com | Adam | Mzannar

我已經備份了:

  • /home/node/.n8n/database.sqlite
  • /home/node/.n8n/database.sqlite-wal
  • /home/node/.n8n/database.sqlite-shm

問題:
最安全且受支援的方式是什麼,僅更改/重設現有使用者的密碼,不刪除帳戶,也不會遺失工作流程、認證或資料?

錯誤訊息是什麼(如果有的話)?

忘記密碼頁面顯示:

Please contact your admin. n8n isn't set up to send email right now.

嘗試手動方法時,我收到:

Cannot find module 'bcryptjs'

attempt to write a readonly database

sqlite3: not found

此外,Coolify/Traefik 路由有過時的舊 IP 標籤,因為我的 VM 外部 IP 已變更。我暫時直接透過伺服器 IP 和連接埠存取 n8n。

請分享您的工作流程

這與特定工作流程無關。這是自託管登入/密碼恢復問題。

分享最後一個節點返回的輸出

不適用。

您的 n8n 設定資訊

  • n8n 版本: 2.13.3
  • 資料庫(預設:SQLite): SQLite
  • n8n EXECUTIONS_PROCESS 設定(預設:own、main): default / 不確定
  • 執行 n8n 的方式(Docker、npm、n8n cloud、桌面應用程式): Docker through Coolify on Google Cloud VM
  • 作業系統: Debian GNU/Linux 12 / Google Cloud VM

n8n CLI 重設命令就能做到這一點

你可以試試看嗎?

1. 識別你的容器名稱

在你的 VM 終端執行以下命令,找到 n8n 容器的確切名稱:

docker ps

(尋找執行 n8n 映像的容器;它可能類似於 n8n-nnncoolify-yyy

2. 執行重設命令

使用 node 使用者(n8n 執行的使用者)執行命令,以避免權限問題。將 <container_name> 替換為你在步驟 1 中找到的名稱:

docker exec -u node -it <container_name> n8n user-management:reset

預期輸出:Successfully reset the database to default user state.

3. 重新啟動容器

為了讓變更生效並觸發設定精靈,請透過 Coolify 或 CLI 重新啟動容器:

docker restart <container_name>

4. 重新聲明帳戶

  1. 在無痕/隱私模式中開啟瀏覽器(這對於避免陳舊的工作階段 Cookie 至關重要)。
  2. 導航至你的 n8n 登入頁面。
  3. 你將被重新導向到所有者設定頁面。
  4. 輸入你的電子郵件(adammzannar2009@gmail.com)並選擇新密碼。
  5. 登入。你的所有工作流程和認證都會在那裡。

或者,你可以如下所示配置你的 docker 以使用 SMTP 電子郵件

@Adam_Mzannar
如果你能在 n8n 中配置 smtp,重新啟動實例並點擊重設密碼,有很大的機會會成功。不要使用 docker exec -u node -it <container_name> n8n user-management:reset;這樣做會導致你不想要的結果。

N8N_EMAIL_MODE=smtp
N8N_SMTP_HOST=smtp.gmail.com
N8N_SMTP_PORT=587
N8N_SMTP_USER=你的信箱@gmail.com
N8N_SMTP_PASS=你的-google-應用密碼
N8N_SMTP_SENDER=你的信箱@gmail.com
N8N_SMTP_SSL=false
N8N_SMTP_STARTTLS=true

為什麼不行?它並不會

下列目標也會達成

我是否遺漏了什麼?

歡迎 @Adam_Mzannar 加入我們的社群!我是 Jay,是一位 n8n 認證創作者。

你可以直接在 SQLite 資料庫中更新密碼雜湊,而不需要接觸任何其他使用者資料。首先停止 n8n 容器,然後執行:sqlite3 /path/to/database.sqlite "UPDATE user SET password='$2b$10$NEW_HASH' WHERE email='your@email.com';"。使用任何 bcrypt 工具產生成本為 10 的 bcrypt 雜湊(例如,node -e "const b=require('bcryptjs'); console.log(b.hashSync('newpassword', 10))")。重新啟動容器並使用新密碼登入。只有密碼欄位會改變 - 所有工作流程、認證憑證和設定都保持不變。

原提問者已經說明

嗨 Kjooleng!根據我的研究,這個命令會重設所有內容,包括,他不想要這樣:“我不想重新定義用戶管理或建立新帳戶,如果這會移除/替換目前使用者的話”

不會的,因為

無論如何,我會讓提問者決定

@kjooleng
根據文件,此操作會將使用者管理還原至預配置狀態並移除所有使用者帳戶。工作流程/認證資訊可能仍保留在資料庫中,但使用者帳戶會被移除/重新建立

在本機代管的 n8n 上重設管理員密碼 - 問題 - n8n Community

最安全的方法來重設特定使用者的密碼而不影響其他帳戶:直接更新資料庫中 user 表格的 password 欄位。產生新密碼的 bcrypt 雜湊值(使用任何 bcrypt 工具或一次性 Node.js 指令碼:require('bcryptjs').hash('newpassword', 10)),然後在 SQLite 或 Postgres 中執行 UPDATE user SET password = '<hash>' WHERE email = 'user@example.com'。這只會觸及該使用者的密碼欄位,不會影響其他任何部分 - 沒有帳戶刪除,沒有認證影響。