@lobehub/lobehub 2.1.1 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/.env.example +4 -3
  2. package/.github/workflows/release-desktop-stable.yml +1 -1
  3. package/CHANGELOG.md +50 -0
  4. package/Dockerfile +6 -4
  5. package/README.md +3 -4
  6. package/README.zh-CN.md +3 -4
  7. package/apps/desktop/src/main/controllers/McpInstallCtr.ts +10 -10
  8. package/apps/desktop/src/main/controllers/NetworkProxyCtr.ts +6 -6
  9. package/apps/desktop/src/main/controllers/RemoteServerSyncCtr.ts +2 -2
  10. package/changelog/v2.json +14 -0
  11. package/docs/changelog/2025-03-02-new-models.mdx +1 -1
  12. package/docs/changelog/2025-03-02-new-models.zh-CN.mdx +1 -1
  13. package/docs/changelog/2025-04-06-exports.mdx +1 -1
  14. package/docs/changelog/2025-04-06-exports.zh-CN.mdx +1 -1
  15. package/docs/changelog/2025-05-08-desktop-app.mdx +2 -2
  16. package/docs/changelog/2025-05-08-desktop-app.zh-CN.mdx +2 -2
  17. package/docs/changelog/2025-06-08-claude-4.mdx +1 -1
  18. package/docs/changelog/2025-06-08-claude-4.zh-CN.mdx +1 -1
  19. package/docs/changelog/2025-07-08-mcp-market.mdx +1 -1
  20. package/docs/changelog/2025-07-08-mcp-market.zh-CN.mdx +1 -1
  21. package/docs/changelog/2025-08-08-image-generation.mdx +1 -1
  22. package/docs/changelog/2025-08-08-image-generation.zh-CN.mdx +1 -1
  23. package/docs/changelog/2025-09-08-gemini.mdx +1 -1
  24. package/docs/changelog/2025-09-08-gemini.zh-CN.mdx +1 -1
  25. package/docs/changelog/2025-10-08-python.mdx +1 -1
  26. package/docs/changelog/2025-10-08-python.zh-CN.mdx +1 -1
  27. package/docs/changelog/2025-11-08-comfy-ui.mdx +1 -1
  28. package/docs/changelog/2025-11-08-comfy-ui.zh-CN.mdx +1 -1
  29. package/docs/changelog/2025-12-20-mcp.mdx +1 -1
  30. package/docs/changelog/2025-12-20-mcp.zh-CN.mdx +1 -1
  31. package/docs/development/basic/add-new-authentication-providers.zh-CN.mdx +1 -1
  32. package/docs/development/basic/add-new-image-model.mdx +3 -3
  33. package/docs/development/basic/add-new-image-model.zh-CN.mdx +3 -3
  34. package/docs/development/basic/chat-api.mdx +10 -10
  35. package/docs/development/basic/chat-api.zh-CN.mdx +10 -10
  36. package/docs/development/basic/feature-development.mdx +4 -4
  37. package/docs/development/basic/feature-development.zh-CN.mdx +4 -4
  38. package/docs/development/basic/setup-development.mdx +4 -4
  39. package/docs/development/basic/setup-development.zh-CN.mdx +4 -4
  40. package/docs/development/internationalization/add-new-locale.mdx +1 -1
  41. package/docs/development/internationalization/add-new-locale.zh-CN.mdx +1 -1
  42. package/docs/development/internationalization/internationalization-implementation.mdx +5 -5
  43. package/docs/development/internationalization/internationalization-implementation.zh-CN.mdx +5 -5
  44. package/docs/development/others/lighthouse.mdx +8 -8
  45. package/docs/development/others/lighthouse.zh-CN.mdx +8 -8
  46. package/docs/development/start.mdx +3 -3
  47. package/docs/development/start.zh-CN.mdx +3 -3
  48. package/docs/self-hosting/advanced/feature-flags.mdx +1 -1
  49. package/docs/self-hosting/advanced/feature-flags.zh-CN.mdx +1 -1
  50. package/docs/self-hosting/advanced/knowledge-base.mdx +2 -2
  51. package/docs/self-hosting/advanced/knowledge-base.zh-CN.mdx +2 -2
  52. package/docs/self-hosting/advanced/online-search.mdx +1 -1
  53. package/docs/self-hosting/advanced/online-search.zh-CN.mdx +1 -1
  54. package/docs/self-hosting/advanced/redis/upstash.mdx +3 -3
  55. package/docs/self-hosting/advanced/redis/upstash.zh-CN.mdx +3 -3
  56. package/docs/self-hosting/advanced/redis.mdx +6 -6
  57. package/docs/self-hosting/advanced/redis.zh-CN.mdx +6 -6
  58. package/docs/self-hosting/advanced/s3/rustfs.mdx +116 -116
  59. package/docs/self-hosting/advanced/s3/rustfs.zh-CN.mdx +116 -117
  60. package/docs/self-hosting/advanced/upstream-sync.zh-CN.mdx +5 -5
  61. package/docs/self-hosting/auth/email.mdx +70 -0
  62. package/docs/self-hosting/auth/email.zh-CN.mdx +70 -0
  63. package/docs/self-hosting/{advanced/auth → auth}/legacy.mdx +10 -10
  64. package/docs/self-hosting/{advanced/auth → auth}/legacy.zh-CN.mdx +5 -5
  65. package/docs/self-hosting/{advanced/auth → auth}/next-auth/casdoor.zh-CN.mdx +3 -3
  66. package/docs/self-hosting/{advanced/auth → auth}/next-auth/keycloak.zh-CN.mdx +2 -2
  67. package/docs/self-hosting/{advanced/auth → auth}/next-auth/logto.zh-CN.mdx +2 -2
  68. package/docs/self-hosting/{advanced/auth → auth}/providers/apple.mdx +6 -6
  69. package/docs/self-hosting/{advanced/auth → auth}/providers/apple.zh-CN.mdx +6 -6
  70. package/docs/self-hosting/{advanced/auth → auth}/providers/auth0.mdx +12 -12
  71. package/docs/self-hosting/{advanced/auth → auth}/providers/auth0.zh-CN.mdx +12 -12
  72. package/docs/self-hosting/{advanced/auth → auth}/providers/authelia.mdx +13 -13
  73. package/docs/self-hosting/{advanced/auth → auth}/providers/authelia.zh-CN.mdx +13 -13
  74. package/docs/self-hosting/{advanced/auth → auth}/providers/authentik.mdx +13 -13
  75. package/docs/self-hosting/{advanced/auth → auth}/providers/authentik.zh-CN.mdx +13 -13
  76. package/docs/self-hosting/{advanced/auth → auth}/providers/casdoor.mdx +8 -8
  77. package/docs/self-hosting/{advanced/auth → auth}/providers/casdoor.zh-CN.mdx +7 -7
  78. package/docs/self-hosting/{advanced/auth → auth}/providers/cloudflare-zero-trust.mdx +7 -7
  79. package/docs/self-hosting/{advanced/auth → auth}/providers/cloudflare-zero-trust.zh-CN.mdx +6 -6
  80. package/docs/self-hosting/{advanced/auth → auth}/providers/cognito.mdx +13 -13
  81. package/docs/self-hosting/{advanced/auth → auth}/providers/cognito.zh-CN.mdx +13 -13
  82. package/docs/self-hosting/{advanced/auth → auth}/providers/feishu.mdx +10 -10
  83. package/docs/self-hosting/{advanced/auth → auth}/providers/feishu.zh-CN.mdx +10 -10
  84. package/docs/self-hosting/{advanced/auth → auth}/providers/generic-oidc.mdx +12 -12
  85. package/docs/self-hosting/{advanced/auth → auth}/providers/generic-oidc.zh-CN.mdx +12 -12
  86. package/docs/self-hosting/{advanced/auth → auth}/providers/github.mdx +10 -10
  87. package/docs/self-hosting/{advanced/auth → auth}/providers/github.zh-CN.mdx +10 -10
  88. package/docs/self-hosting/{advanced/auth → auth}/providers/google.mdx +10 -10
  89. package/docs/self-hosting/{advanced/auth → auth}/providers/google.zh-CN.mdx +10 -10
  90. package/docs/self-hosting/{advanced/auth → auth}/providers/keycloak.mdx +11 -11
  91. package/docs/self-hosting/{advanced/auth → auth}/providers/keycloak.zh-CN.mdx +11 -11
  92. package/docs/self-hosting/{advanced/auth → auth}/providers/logto.mdx +8 -8
  93. package/docs/self-hosting/{advanced/auth → auth}/providers/logto.zh-CN.mdx +7 -7
  94. package/docs/self-hosting/{advanced/auth → auth}/providers/microsoft.mdx +11 -11
  95. package/docs/self-hosting/{advanced/auth → auth}/providers/microsoft.zh-CN.mdx +11 -11
  96. package/docs/self-hosting/{advanced/auth → auth}/providers/okta.mdx +13 -13
  97. package/docs/self-hosting/{advanced/auth → auth}/providers/okta.zh-CN.mdx +13 -13
  98. package/docs/self-hosting/auth/providers/password.mdx +112 -0
  99. package/docs/self-hosting/auth/providers/password.zh-CN.mdx +103 -0
  100. package/docs/self-hosting/{advanced/auth → auth}/providers/wechat.mdx +10 -10
  101. package/docs/self-hosting/{advanced/auth → auth}/providers/wechat.zh-CN.mdx +10 -10
  102. package/docs/self-hosting/{advanced/auth → auth}/providers/zitadel.mdx +13 -13
  103. package/docs/self-hosting/{advanced/auth → auth}/providers/zitadel.zh-CN.mdx +13 -13
  104. package/docs/self-hosting/{advanced/auth.mdx → auth.mdx} +24 -81
  105. package/docs/self-hosting/{advanced/auth.zh-CN.mdx → auth.zh-CN.mdx} +23 -80
  106. package/docs/self-hosting/environment-variables/auth.mdx +7 -0
  107. package/docs/self-hosting/environment-variables/auth.zh-CN.mdx +7 -0
  108. package/docs/self-hosting/environment-variables/basic.mdx +0 -7
  109. package/docs/self-hosting/environment-variables/basic.zh-CN.mdx +0 -7
  110. package/docs/self-hosting/environment-variables/redis.mdx +1 -1
  111. package/docs/self-hosting/environment-variables/redis.zh-CN.mdx +1 -1
  112. package/docs/self-hosting/environment-variables.mdx +1 -1
  113. package/docs/self-hosting/examples/azure-openai.mdx +0 -1
  114. package/docs/self-hosting/examples/azure-openai.zh-CN.mdx +0 -1
  115. package/docs/self-hosting/faq/no-v1-suffix.mdx +3 -3
  116. package/docs/self-hosting/faq/no-v1-suffix.zh-CN.mdx +3 -3
  117. package/docs/self-hosting/{advanced → migration/v2}/auth/clerk-to-betterauth.mdx +7 -7
  118. package/docs/self-hosting/{advanced → migration/v2}/auth/clerk-to-betterauth.zh-CN.mdx +7 -7
  119. package/docs/self-hosting/{advanced → migration/v2}/auth/migration-internals.mdx +2 -2
  120. package/docs/self-hosting/{advanced → migration/v2}/auth/migration-internals.zh-CN.mdx +2 -2
  121. package/docs/self-hosting/{advanced → migration/v2}/auth/nextauth-to-betterauth.mdx +11 -11
  122. package/docs/self-hosting/{advanced → migration/v2}/auth/nextauth-to-betterauth.zh-CN.mdx +11 -11
  123. package/docs/self-hosting/migration/v2/breaking-changes.mdx +1 -1
  124. package/docs/self-hosting/migration/v2/breaking-changes.zh-CN.mdx +1 -1
  125. package/docs/self-hosting/platform/docker-compose.zh-CN.mdx +4 -4
  126. package/docs/self-hosting/platform/docker.mdx +5 -5
  127. package/docs/self-hosting/platform/docker.zh-CN.mdx +10 -10
  128. package/docs/self-hosting/platform/dokploy.mdx +1 -1
  129. package/docs/self-hosting/platform/dokploy.zh-CN.mdx +5 -5
  130. package/docs/self-hosting/platform/sealos.mdx +12 -12
  131. package/docs/self-hosting/platform/sealos.zh-CN.mdx +17 -17
  132. package/docs/self-hosting/platform/vercel.zh-CN.mdx +4 -4
  133. package/docs/self-hosting/start.mdx +3 -3
  134. package/docs/self-hosting/start.zh-CN.mdx +4 -4
  135. package/locales/en-US/auth.json +2 -1
  136. package/locales/en-US/authError.json +1 -0
  137. package/locales/en-US/metadata.json +1 -1
  138. package/locales/zh-CN/auth.json +1 -0
  139. package/locales/zh-CN/authError.json +1 -0
  140. package/netlify.toml +0 -1
  141. package/package.json +1 -1
  142. package/packages/types/src/serverConfig.ts +1 -0
  143. package/src/app/[variants]/(auth)/auth-error/page.tsx +4 -2
  144. package/src/app/[variants]/(auth)/signin/SignInEmailStep.tsx +57 -50
  145. package/src/app/[variants]/(auth)/signin/SignInPasswordStep.tsx +1 -1
  146. package/src/app/[variants]/(auth)/signin/page.tsx +2 -0
  147. package/src/app/[variants]/(auth)/signin/useSignIn.ts +2 -0
  148. package/src/app/[variants]/(auth)/signup/[[...signup]]/page.tsx +7 -0
  149. package/src/envs/app.ts +0 -2
  150. package/src/envs/auth.ts +3 -0
  151. package/src/libs/better-auth/define-config.ts +1 -1
  152. package/src/libs/better-auth/sso/providers/feishu.ts +15 -14
  153. package/src/libs/better-auth/sso/providers/wechat.ts +6 -3
  154. package/src/libs/next/proxy/define-config.ts +1 -1
  155. package/src/locales/default/auth.ts +3 -1
  156. package/src/locales/default/authError.ts +2 -0
  157. package/src/locales/default/metadata.ts +1 -1
  158. package/src/server/globalConfig/index.ts +1 -0
  159. package/src/server/ld.ts +1 -1
  160. package/src/store/chat/slices/topic/action.ts +1 -1
  161. package/src/store/electron/actions/settings.ts +7 -7
  162. package/src/store/electron/actions/sync.ts +11 -11
  163. package/src/store/global/actions/general.ts +12 -12
  164. package/src/store/global/initialState.ts +11 -11
  165. package/src/store/global/selectors/clientDB.ts +1 -1
  166. package/src/store/global/selectors/systemStatus.ts +1 -1
  167. package/src/store/image/slices/generationConfig/action.ts +12 -12
  168. package/src/store/image/utils/size.ts +11 -11
  169. package/src/store/library/slices/ragEval/actions/dataset.ts +1 -1
  170. package/src/store/serverConfig/selectors.ts +1 -0
  171. package/src/store/session/slices/session/initialState.ts +6 -6
  172. package/src/store/session/slices/session/reducers.ts +1 -1
  173. package/src/store/session/slices/sessionGroup/initialState.ts +2 -2
  174. package/src/store/tool/slices/customPlugin/action.ts +2 -2
  175. package/src/store/tool/slices/oldStore/action.ts +5 -5
  176. package/src/store/userMemory/slices/preference/action.ts +6 -6
  177. /package/docs/self-hosting/{advanced/auth → auth}/clerk.mdx +0 -0
  178. /package/docs/self-hosting/{advanced/auth → auth}/clerk.zh-CN.mdx +0 -0
  179. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/auth0.mdx +0 -0
  180. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/auth0.zh-CN.mdx +0 -0
  181. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/authelia.mdx +0 -0
  182. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/authelia.zh-CN.mdx +0 -0
  183. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/authentik.mdx +0 -0
  184. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/authentik.zh-CN.mdx +0 -0
  185. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/casdoor.mdx +0 -0
  186. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/cloudflare-zero-trust.mdx +0 -0
  187. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/cloudflare-zero-trust.zh-CN.mdx +0 -0
  188. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/github.mdx +0 -0
  189. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/github.zh-CN.mdx +0 -0
  190. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/google.mdx +0 -0
  191. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/google.zh-CN.mdx +0 -0
  192. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/keycloak.mdx +0 -0
  193. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/logto.mdx +0 -0
  194. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/microsoft-entra-id.mdx +0 -0
  195. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/microsoft-entra-id.zh-CN.mdx +0 -0
  196. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/okta.mdx +0 -0
  197. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/okta.zh-CN.mdx +0 -0
  198. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/wechat.mdx +0 -0
  199. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/wechat.zh-CN.mdx +0 -0
  200. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/zitadel.mdx +0 -0
  201. /package/docs/self-hosting/{advanced/auth → auth}/next-auth/zitadel.zh-CN.mdx +0 -0
@@ -1,5 +1,5 @@
1
1
  ---
2
- title: Deploy Lobe Chat Database Version on Sealos
2
+ title: Deploy LobeHub Database Version on Sealos
3
3
  description: >-
4
4
  Learn how to deploy LobeHub on Sealos with ease. Follow the provided steps to
5
5
  set up LobeHub and start using it efficiently.
@@ -10,7 +10,7 @@ tags:
10
10
  - Custom Domain Binding
11
11
  ---
12
12
 
13
- # Deploying Lobe Chat Database Version on Sealos
13
+ # Deploying LobeHub Database Version on Sealos
14
14
 
15
15
  <Callout type="info">
16
16
  This article assumes that you are familiar with the basic principles and processes of deploying
@@ -25,9 +25,9 @@ The application on Sealos includes 4 services:
25
25
  - Logto for authrization(need to deploy separately).
26
26
  - PostgreSQL with Vector plugin for data storage and indexing.
27
27
  - One object storage Bucket.
28
- - Lobe Chat database version.
28
+ - LobeHub database version.
29
29
 
30
- Here is the process for deploying the Lobe Chat server database version on Sealos:
30
+ Here is the process for deploying the LobeHub server database version on Sealos:
31
31
 
32
32
  ## Pre-Deployment Setup
33
33
 
@@ -53,17 +53,17 @@ Select `Next.js (App Router)` as the framework, then click the `Start building`
53
53
 
54
54
  ![Logto create application page](https://raw.githubusercontent.com/labring-actions/templates/main/template/lobe-chat-db/images/logto-create-application.png)
55
55
 
56
- **Step 4**:In the pop-up window, fill in the application name as `Lobe Chat`, then click the `Create application` button. Next, do not fill in anything, just click the bottom `Finish and done` button to create it.
56
+ **Step 4**:In the pop-up window, fill in the application name as `LobeHub`, then click the `Create application` button. Next, do not fill in anything, just click the bottom `Finish and done` button to create it.
57
57
 
58
58
  ![Logto create application done page](https://raw.githubusercontent.com/labring-actions/templates/main/template/lobe-chat-db/images/logto-create-application-done.png)
59
59
 
60
- **Step 5**:In the `Lobe Chat` application, find the following three parameters, which will be used later when deploying the Lobe Chat database version.
60
+ **Step 5**:In the `LobeHub` application, find the following three parameters, which will be used later when deploying the LobeHub database version.
61
61
 
62
62
  ![Logto application detail page](https://raw.githubusercontent.com/labring-actions/templates/main/template/lobe-chat-db/images/logto-app-detail.png)
63
63
 
64
- ## Deploy Lobe Chat Database Version
64
+ ## Deploy LobeHub Database Version
65
65
 
66
- **Step 1**:Click the button below to visit the Lobe Chat database version application deployment page:
66
+ **Step 1**:Click the button below to visit the LobeHub database version application deployment page:
67
67
 
68
68
  [![](https://raw.githubusercontent.com/labring-actions/templates/main/Deploy-on-Sealos.svg)](https://template.usw.sealos.io/deploy?templateName=lobe-chat-db)
69
69
 
@@ -75,13 +75,13 @@ Fill in the following three required parameters:
75
75
 
76
76
  **Step 2**:Click the `Deploy App` button, after the deployment is complete, wait for all the components of the application to be in the "Running" state, click the application's "Details" button to enter the application details page.
77
77
 
78
- ![Lobe Chat database version deployment done page](https://raw.githubusercontent.com/labring-actions/templates/main/template/lobe-chat-db/images/lobe-chat-db-deployment-done-en.png)
78
+ ![LobeHub database version deployment done page](https://raw.githubusercontent.com/labring-actions/templates/main/template/lobe-chat-db/images/lobe-chat-db-deployment-done-en.png)
79
79
 
80
80
  **Step 3**:Find the public address, copy it, and use it later.
81
81
 
82
82
  ## Post-Deployment Configuration
83
83
 
84
- **Step 1**:Enter the `Applications` page of Logto, find the `Lobe Chat` application, click to enter the application details page.
84
+ **Step 1**:Enter the `Applications` page of Logto, find the `LobeHub` application, click to enter the application details page.
85
85
 
86
86
  **Step 2**:In the `Settings` page, find the `Redirect URI` and `Post sign-out redirect URI` parameters, fill in the following values:
87
87
 
@@ -90,8 +90,8 @@ Fill in the following three required parameters:
90
90
 
91
91
  **Step 3**:Click the `Save changes` button to save the configuration.
92
92
 
93
- **Step 4**:Now, access the Lobe Chat database version through `https://<lobe-chat-db-public-address>`, click the avatar in the upper left corner, and then click the \[Log in / Sign up] button.
93
+ **Step 4**:Now, access the LobeHub database version through `https://<lobe-chat-db-public-address>`, click the avatar in the upper left corner, and then click the \[Log in / Sign up] button.
94
94
 
95
95
  **Step 5**:Next, you will be redirected to the Logto login page, click the \[Create account] button to register an account.
96
96
 
97
- **Step 6**:After registration, you can use Logto to login to the Lobe Chat database version.
97
+ **Step 6**:After registration, you can use Logto to login to the LobeHub database version.
@@ -12,19 +12,19 @@ tags:
12
12
  # 使用 Sealos 部署 LobeHub 数据库版
13
13
 
14
14
  <Callout type="info">
15
- 本文假设你已经熟悉 Lobe Chat
16
- 服务器数据库版的部署基本原理和流程,因此只包含与核心环境变量配置相关的内容。如果你对 Lobe Chat
15
+ 本文假设你已经熟悉 LobeHub
16
+ 服务器数据库版的部署基本原理和流程,因此只包含与核心环境变量配置相关的内容。如果你对 LobeHub
17
17
  服务器数据库版的部署原理不熟悉,请先参考[部署服务器数据库](/zh/docs/self-hosting/server-database)。
18
18
  </Callout>
19
19
 
20
- 在 Sealos 的 Lobe Chat 数据库版应用中总共包含有以下四个服务:
20
+ 在 Sealos 的 LobeHub 数据库版应用中总共包含有以下四个服务:
21
21
 
22
22
  - Logto 提供身份校验(需额外部署)
23
23
  - 带有 Vector 插件的 PostgreSQL 来做数据存储和向量化
24
24
  - 一个对象存储 Bucket
25
25
  - LobeHub Database 的实例
26
26
 
27
- 这里是在 Sealos 上部署 Lobe Chat 服务器数据库版的流程:
27
+ 这里是在 Sealos 上部署 LobeHub 服务器数据库版的流程:
28
28
 
29
29
  ## 预部署配置
30
30
 
@@ -57,18 +57,18 @@ tags:
57
57
 
58
58
  ![Logto 创建应用页面](https://raw.githubusercontent.com/labring-actions/templates/main/template/lobe-chat-db/images/logto-create-application.png)
59
59
 
60
- 在弹窗中填写应用的名称为 `Lobe Chat`,然后点击 `Create application` 按钮。接下来啥也不用填,直接点击底部的 `Finish and done` 按钮就创建完成了。
60
+ 在弹窗中填写应用的名称为 `LobeHub`,然后点击 `Create application` 按钮。接下来啥也不用填,直接点击底部的 `Finish and done` 按钮就创建完成了。
61
61
 
62
62
  ![Logto 创建应用完成页面](https://raw.githubusercontent.com/labring-actions/templates/main/template/lobe-chat-db/images/logto-create-application-done.png)
63
63
 
64
- 在 `Lobe Chat` 应用中找到以下三个参数,后面部署 Lobe Chat 数据库版时需要用到。
64
+ 在 `LobeHub` 应用中找到以下三个参数,后面部署 LobeHub 数据库版时需要用到。
65
65
 
66
66
  ![Logto 应用详情页面](https://raw.githubusercontent.com/labring-actions/templates/main/template/lobe-chat-db/images/logto-app-detail.png)
67
67
  </Steps>
68
68
 
69
- ## 部署 Lobe Chat 数据库版
69
+ ## 部署 LobeHub 数据库版
70
70
 
71
- 点击下方按钮访问 Lobe Chat 数据库版应用部署页面:
71
+ 点击下方按钮访问 LobeHub 数据库版应用部署页面:
72
72
 
73
73
  [![](https://raw.githubusercontent.com/labring-actions/templates/main/Deploy-on-Sealos.svg)](https://template.hzh.sealos.run/deploy?templateName=lobe-chat-db)
74
74
 
@@ -80,33 +80,33 @@ tags:
80
80
 
81
81
  点击【部署】按钮,部署完成后,等待应用的所有组件状态都变成 “运行中”,点击应用的【详情】按钮,进入应用详情页面。
82
82
 
83
- ![Lobe Chat 数据库版部署完成页面](https://raw.githubusercontent.com/labring-actions/templates/main/template/lobe-chat-db/images/lobe-chat-db-deployment-done.png)
83
+ ![LobeHub 数据库版部署完成页面](https://raw.githubusercontent.com/labring-actions/templates/main/template/lobe-chat-db/images/lobe-chat-db-deployment-done.png)
84
84
 
85
85
  找到公网地址,复制下来,后面需要用到。
86
86
 
87
- ![Lobe Chat 数据库版公网地址](https://raw.githubusercontent.com/labring-actions/templates/main/template/lobe-chat-db/images/lobe-chat-db-public-address.png)
87
+ ![LobeHub 数据库版公网地址](https://raw.githubusercontent.com/labring-actions/templates/main/template/lobe-chat-db/images/lobe-chat-db-public-address.png)
88
88
 
89
89
  ## 部署后配置
90
90
 
91
- 进入 Logto 的 `Applications` 页面,找到 `Lobe Chat` 应用,点击进入应用详情页面。
91
+ 进入 Logto 的 `Applications` 页面,找到 `LobeHub` 应用,点击进入应用详情页面。
92
92
 
93
93
  在 `Settings` 页面中找到 “Redirect URI” 和 “Post sign-out redirect URI” 这两个参数,填入以下值:
94
94
 
95
95
  - Redirect URI:`https://<lobe-chat-db-public-address>/api/auth/callback/logto`
96
96
  - Post sign-out redirect URI:`https://<lobe-chat-db-public-address>`
97
97
 
98
- 其中 `https://<lobe-chat-db-public-address>` 为 Lobe Chat 数据库版的公网地址。
98
+ 其中 `https://<lobe-chat-db-public-address>` 为 LobeHub 数据库版的公网地址。
99
99
 
100
100
  填完之后点击 `Save changes` 按钮保存配置。
101
101
 
102
- 现在通过 `https://<lobe-chat-db-public-address>` 访问 Lobe Chat 数据库版,点击左上角的头像,然后点击【登录 / 注册】按钮:
102
+ 现在通过 `https://<lobe-chat-db-public-address>` 访问 LobeHub 数据库版,点击左上角的头像,然后点击【登录 / 注册】按钮:
103
103
 
104
- ![Lobe Chat 数据库版登录页面](https://raw.githubusercontent.com/labring-actions/templates/main/template/lobe-chat-db/images/lobe-chat-db-login.png)
104
+ ![LobeHub 数据库版登录页面](https://raw.githubusercontent.com/labring-actions/templates/main/template/lobe-chat-db/images/lobe-chat-db-login.png)
105
105
 
106
106
  接下来会跳转到 Logto 的登录页面,点击【注册】注册一个账号。
107
107
 
108
- ![Lobe Chat 数据库版注册页面](https://raw.githubusercontent.com/labring-actions/templates/main/template/lobe-chat-db/images/lobe-chat-db-register.png)
108
+ ![LobeHub 数据库版注册页面](https://raw.githubusercontent.com/labring-actions/templates/main/template/lobe-chat-db/images/lobe-chat-db-register.png)
109
109
 
110
- 注册完成后,即可使用 Logto 登录 Lobe Chat 数据库版。
110
+ 注册完成后,即可使用 Logto 登录 LobeHub 数据库版。
111
111
 
112
- ![Lobe Chat 数据库版登录成功页面](https://raw.githubusercontent.com/labring-actions/templates/main/template/lobe-chat-db/images/lobe-chat-db-login-success.png)
112
+ ![LobeHub 数据库版登录成功页面](https://raw.githubusercontent.com/labring-actions/templates/main/template/lobe-chat-db/images/lobe-chat-db-login-success.png)
@@ -1,6 +1,6 @@
1
1
  ---
2
- title: 在 Vercel 上部署 LobeHub 的服务端数据库版本
3
- description: 本文详细介绍如何在 Vercel 中部署服务端数据库版 LobeHub,包括数据库配置、身份验证服务配置和 S3 存储服务的设置步骤。
2
+ title: 在 Vercel 上部署 LobeHub
3
+ description: 本文详细介绍如何在 Vercel 中部署 LobeHub,包括数据库配置、身份验证服务配置和 S3 存储服务的设置步骤。
4
4
  tags:
5
5
  - 服务端数据库
6
6
  - Postgres
@@ -12,9 +12,9 @@ tags:
12
12
  - 环境变量配置
13
13
  ---
14
14
 
15
- # 在 Vercel 上部署服务端数据库版
15
+ # 在 Vercel 上部署 LobeHub
16
16
 
17
- 本文将详细介绍如何在 Vercel 中部署服务端数据库版 LobeHub,包括: 1)数据库配置;2)身份验证服务配置;3) S3 存储服务的设置步骤。
17
+ 本文将详细介绍如何在 Vercel 中部署 LobeHub,包括: 1)数据库配置;2)身份验证服务配置;3) S3 存储服务的设置步骤。
18
18
 
19
19
  <Callout type={'warning'}>
20
20
  进行后续操作前,请务必确认以下事项:
@@ -4,7 +4,7 @@ description: >-
4
4
  Explore multiple deployment platforms like Vercel, Docker, Docker Compose, and
5
5
  more to deploy LobeHub. Choose the platform that best suits your needs.
6
6
  tags:
7
- - Lobe Chat
7
+ - LobeHub
8
8
  - Deployment Platform
9
9
  - Vercel
10
10
  - Docker
@@ -12,8 +12,8 @@ tags:
12
12
  - Alibaba Cloud
13
13
  ---
14
14
 
15
- # Build Your Own Lobe Chat
15
+ # Build Your Own LobeHub
16
16
 
17
- LobeHub supports various deployment platforms, including Vercel, Docker, and Docker Compose. You can choose a deployment platform that suits you to build your own Lobe Chat.
17
+ LobeHub supports various deployment platforms, including Vercel, Docker, and Docker Compose. You can choose a deployment platform that suits you to build your own LobeHub.
18
18
 
19
19
  <PlatformCards urlPrefix={'platform'} />
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  title: 构建属于自己的 LobeHub - 自选部署平台
3
3
  description: >-
4
- 选择适合自己的部署平台,构建个性化的 Lobe Chat。支持 Docker、Docker
4
+ 选择适合自己的部署平台,构建个性化的 LobeHub。支持 Docker、Docker
5
5
  Compose、Netlify、Railway、Repocloud、Sealos、Vercel 和 Zeabur 部署。
6
6
  tags:
7
- - Lobe Chat
7
+ - LobeHub
8
8
  - 部署平台
9
9
  - Docker
10
10
  - Netlify
@@ -16,8 +16,8 @@ tags:
16
16
  - 腾讯轻量云
17
17
  ---
18
18
 
19
- # 构建属于自己的 Lobe Chat
19
+ # 构建属于自己的 LobeHub
20
20
 
21
- LobeHub 支持多种部署平台,包括 Vercel、Docker、 Docker Compose 、阿里云计算巢 和腾讯轻量云 等,你可以选择适合自己的部署平台进行部署,构建属于自己的 Lobe Chat
21
+ LobeHub 支持多种部署平台,包括 Vercel、Docker、 Docker Compose 、阿里云计算巢 和腾讯轻量云 等,你可以选择适合自己的部署平台进行部署,构建属于自己的 LobeHub
22
22
 
23
23
  <PlatformCards urlPrefix={'platform'} />
@@ -98,6 +98,7 @@
98
98
  "betterAuth.signin.signupLink": "Sign up now",
99
99
  "betterAuth.signin.socialError": "Social sign in failed, please try again",
100
100
  "betterAuth.signin.socialOnlyHint": "This email was registered via a third-party social account. Sign in with that provider, or",
101
+ "betterAuth.signin.ssoOnlyNoProviders": "Email registration is disabled and no SSO providers are configured. Please contact your administrator.",
101
102
  "betterAuth.signin.submit": "Sign In",
102
103
  "betterAuth.signup.confirmPasswordPlaceholder": "Confirm your password",
103
104
  "betterAuth.signup.emailPlaceholder": "Enter your email address",
@@ -192,7 +193,7 @@
192
193
  "profile.usernameRule": "Username can only contain letters, numbers, or underscores",
193
194
  "profile.usernameUpdateFailed": "Failed to update username, please try again later",
194
195
  "signin.subtitle": "Sign up or log in to your {{appName}} account",
195
- "signin.title": "Agent teams that grow with you",
196
+ "signin.title": "Agent teammates that grow with you",
196
197
  "signout": "Log Out",
197
198
  "signup": "Sign Up",
198
199
  "stats.aiheatmaps": "Activity Index",
@@ -8,6 +8,7 @@
8
8
  "codes.DELETED_ACCOUNT_EMAIL": "This email has been associated with a deleted account and cannot be used for registration",
9
9
  "codes.EMAIL_CAN_NOT_BE_UPDATED": "Email cannot be updated for this account",
10
10
  "codes.EMAIL_NOT_ALLOWED": "Email not allowed for registration",
11
+ "codes.EMAIL_NOT_FOUND": "No email associated with this account. Please check if your account has an email bound.",
11
12
  "codes.EMAIL_NOT_VERIFIED": "Please verify your email first",
12
13
  "codes.FAILED_TO_CREATE_SESSION": "Failed to create session",
13
14
  "codes.FAILED_TO_CREATE_USER": "Failed to create user",
@@ -2,7 +2,7 @@
2
2
  "changelog.description": "Stay updated on the new features and improvements of {{appName}}",
3
3
  "changelog.title": "Changelog",
4
4
  "chat.description": "{{appName}} is a work-and-lifestyle space to find, build, and collaborate with agent teams that grow with you.",
5
- "chat.title": "{{appName}} · Agent teams that grow with you",
5
+ "chat.title": "{{appName}} · Agent teammates that grow with you",
6
6
  "discover.assistants.description": "Content, Q&A, images, video, voice, workflows—browse and add Agents from the Community.",
7
7
  "discover.assistants.title": "Agent Community",
8
8
  "discover.description": "Explore Agents, Skills, Providers, models, and MCP Servers.",
@@ -98,6 +98,7 @@
98
98
  "betterAuth.signin.signupLink": "创建账号",
99
99
  "betterAuth.signin.socialError": "登录遇到了问题,请重试",
100
100
  "betterAuth.signin.socialOnlyHint": "此邮箱是通过第三方社交账号注册的。请使用该服务提供商登录,或",
101
+ "betterAuth.signin.ssoOnlyNoProviders": "邮箱注册已禁用,且未配置 SSO 提供商。请联系管理员。",
101
102
  "betterAuth.signin.submit": "登录",
102
103
  "betterAuth.signup.confirmPasswordPlaceholder": "请确认密码",
103
104
  "betterAuth.signup.emailPlaceholder": "请输入邮箱地址",
@@ -8,6 +8,7 @@
8
8
  "codes.DELETED_ACCOUNT_EMAIL": "该邮箱已关联至已删除的账户,无法用于注册",
9
9
  "codes.EMAIL_CAN_NOT_BE_UPDATED": "当前邮箱无法修改,如需更换,请联系支持",
10
10
  "codes.EMAIL_NOT_ALLOWED": "该邮箱不允许用于注册",
11
+ "codes.EMAIL_NOT_FOUND": "登录账号未关联邮箱,请检查账号是否已绑定邮箱",
11
12
  "codes.EMAIL_NOT_VERIFIED": "邮箱还未验证,请先查收验证邮件完成验证",
12
13
  "codes.FAILED_TO_CREATE_SESSION": "会话创建遇到了问题。你可以先重试;如仍失败,请检查网络或稍后再试",
13
14
  "codes.FAILED_TO_CREATE_USER": "创建用户遇到了问题。你可以稍后再试",
package/netlify.toml CHANGED
@@ -7,4 +7,3 @@ NODE_OPTIONS = "--max-old-space-size=4096"
7
7
 
8
8
  [template.environment]
9
9
  OPENAI_API_KEY = "set your OpenAI API Key"
10
- ACCESS_CODE = "set your password to protect your api key"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/lobehub",
3
- "version": "2.1.1",
3
+ "version": "2.1.3",
4
4
  "description": "LobeHub - an open-source,comprehensive AI Agent framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.",
5
5
  "keywords": [
6
6
  "framework",
@@ -49,6 +49,7 @@ export type ServerLanguageModel = Partial<Record<GlobalLLMProviderKey, ServerMod
49
49
  export interface GlobalServerConfig {
50
50
  aiProvider: ServerLanguageModel;
51
51
  defaultAgent?: PartialDeep<UserDefaultAgent>;
52
+ disableEmailPassword?: boolean;
52
53
  enableBusinessFeatures?: boolean;
53
54
  enableEmailVerification?: boolean;
54
55
  enableKlavis?: boolean;
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { SiDiscord } from '@icons-pack/react-simple-icons';
4
4
  import { SOCIAL_URL } from '@lobechat/business-const';
5
- import { Alert, Button, Flexbox, Icon } from '@lobehub/ui';
5
+ import { Button, Flexbox, Icon, Text } from '@lobehub/ui';
6
6
  import { cssVar } from 'antd-style';
7
7
  import { parseAsString, useQueryState } from 'nuqs';
8
8
  import { memo } from 'react';
@@ -45,7 +45,9 @@ const AuthErrorPage = memo(() => {
45
45
  subtitle={description}
46
46
  title={t('title')}
47
47
  >
48
- <Alert title={error || 'UNKNOWN'} type={'error'} />
48
+ <Text style={{ fontFamily: cssVar.fontFamilyCode }} type={'secondary'}>
49
+ ErrorCode: {error || 'UNKNOWN'}
50
+ </Text>
49
51
  </AuthCard>
50
52
  );
51
53
  });
@@ -24,6 +24,7 @@ export const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
24
24
  export const USERNAME_REGEX = /^\w+$/;
25
25
 
26
26
  export interface SignInEmailStepProps {
27
+ disableEmailPassword?: boolean;
27
28
  form: FormInstance<{ email: string }>;
28
29
  isSocialOnly: boolean;
29
30
  loading: boolean;
@@ -36,6 +37,7 @@ export interface SignInEmailStepProps {
36
37
  }
37
38
 
38
39
  export const SignInEmailStep = ({
40
+ disableEmailPassword,
39
41
  form,
40
42
  isSocialOnly,
41
43
  loading,
@@ -101,7 +103,7 @@ export const SignInEmailStep = ({
101
103
  <AuthCard
102
104
  footer={footer}
103
105
  subtitle={t('signin.subtitle', { appName: BRANDING_NAME })}
104
- title={'Agent teams that grow with you'}
106
+ title={'Agent teammates that grow with you'}
105
107
  >
106
108
  {!serverConfigInit && (
107
109
  <Flexbox gap={12}>
@@ -133,58 +135,63 @@ export const SignInEmailStep = ({
133
135
  {getProviderLabel(provider)}
134
136
  </Button>
135
137
  ))}
136
- {divider}
138
+ {!disableEmailPassword && divider}
137
139
  </Flexbox>
138
140
  )}
139
- <Form
140
- form={form}
141
- layout="vertical"
142
- onFinish={(values) => onCheckUser(values as { email: string })}
143
- >
144
- <Form.Item
145
- name="email"
146
- rules={[
147
- { message: t('betterAuth.errors.emailRequired'), required: true },
148
- {
149
- validator: (_, value) => {
150
- if (!value) return Promise.resolve();
151
- const trimmedValue = (value as string).trim();
152
- if (EMAIL_REGEX.test(trimmedValue) || USERNAME_REGEX.test(trimmedValue)) {
153
- return Promise.resolve();
154
- }
155
- return Promise.reject(new Error(t('betterAuth.errors.emailInvalid')));
156
- },
157
- },
158
- ]}
159
- style={{ marginBottom: 0 }}
141
+ {serverConfigInit && disableEmailPassword && oAuthSSOProviders.length === 0 && (
142
+ <Alert description={t('betterAuth.signin.ssoOnlyNoProviders')} showIcon type="warning" />
143
+ )}
144
+ {!disableEmailPassword && (
145
+ <Form
146
+ form={form}
147
+ layout="vertical"
148
+ onFinish={(values) => onCheckUser(values as { email: string })}
160
149
  >
161
- <Input
162
- placeholder={t('betterAuth.signin.emailPlaceholder')}
163
- prefix={
164
- <Icon
165
- icon={Mail}
166
- style={{
167
- marginInline: 6,
168
- }}
169
- />
170
- }
171
- ref={emailInputRef}
172
- size="large"
173
- style={{
174
- padding: 6,
175
- }}
176
- suffix={
177
- <Button
178
- icon={ChevronRight}
179
- loading={loading}
180
- onClick={() => form.submit()}
181
- title={t('betterAuth.signin.nextStep')}
182
- variant={'filled'}
183
- />
184
- }
185
- />
186
- </Form.Item>
187
- </Form>
150
+ <Form.Item
151
+ name="email"
152
+ rules={[
153
+ { message: t('betterAuth.errors.emailRequired'), required: true },
154
+ {
155
+ validator: (_, value) => {
156
+ if (!value) return Promise.resolve();
157
+ const trimmedValue = (value as string).trim();
158
+ if (EMAIL_REGEX.test(trimmedValue) || USERNAME_REGEX.test(trimmedValue)) {
159
+ return Promise.resolve();
160
+ }
161
+ return Promise.reject(new Error(t('betterAuth.errors.emailInvalid')));
162
+ },
163
+ },
164
+ ]}
165
+ style={{ marginBottom: 0 }}
166
+ >
167
+ <Input
168
+ placeholder={t('betterAuth.signin.emailPlaceholder')}
169
+ prefix={
170
+ <Icon
171
+ icon={Mail}
172
+ style={{
173
+ marginInline: 6,
174
+ }}
175
+ />
176
+ }
177
+ ref={emailInputRef}
178
+ size="large"
179
+ style={{
180
+ padding: 6,
181
+ }}
182
+ suffix={
183
+ <Button
184
+ icon={ChevronRight}
185
+ loading={loading}
186
+ onClick={() => form.submit()}
187
+ title={t('betterAuth.signin.nextStep')}
188
+ variant={'filled'}
189
+ />
190
+ }
191
+ />
192
+ </Form.Item>
193
+ </Form>
194
+ )}
188
195
  {isSocialOnly && (
189
196
  <Alert
190
197
  description={
@@ -55,7 +55,7 @@ export const SignInPasswordStep = ({
55
55
  </>
56
56
  }
57
57
  subtitle={t('betterAuth.signin.passwordStep.subtitle')}
58
- title={'Agent teams that grow with you'}
58
+ title={'Agent teammates that grow with you'}
59
59
  >
60
60
  <Text fontSize={20}>{email}</Text>
61
61
  <Form
@@ -10,6 +10,7 @@ import { useSignIn } from './useSignIn';
10
10
 
11
11
  const SignInPage = () => {
12
12
  const {
13
+ disableEmailPassword,
13
14
  email,
14
15
  form,
15
16
  handleBackToEmail,
@@ -29,6 +30,7 @@ const SignInPage = () => {
29
30
  <Suspense fallback={<Loading debugId={'Signin'} />}>
30
31
  {step === 'email' ? (
31
32
  <SignInEmailStep
33
+ disableEmailPassword={disableEmailPassword}
32
34
  form={form as any}
33
35
  isSocialOnly={isSocialOnly}
34
36
  loading={loading}
@@ -32,6 +32,7 @@ export const useSignIn = () => {
32
32
  const router = useRouter();
33
33
  const searchParams = useSearchParams();
34
34
  const enableMagicLink = useServerConfigStore(serverConfigSelectors.enableMagicLink);
35
+ const disableEmailPassword = useServerConfigStore(serverConfigSelectors.disableEmailPassword);
35
36
  const [form] = Form.useForm<SignInFormValues>();
36
37
  const [loading, setLoading] = useState(false);
37
38
  const [socialLoading, setSocialLoading] = useState<string | null>(null);
@@ -242,6 +243,7 @@ export const useSignIn = () => {
242
243
  };
243
244
 
244
245
  return {
246
+ disableEmailPassword,
245
247
  email,
246
248
  form,
247
249
  handleBackToEmail,
@@ -1,3 +1,6 @@
1
+ import { redirect } from 'next/navigation';
2
+
3
+ import { authEnv } from '@/envs/auth';
1
4
  import { metadataModule } from '@/server/metadata';
2
5
  import { translation } from '@/server/translation';
3
6
  import { type DynamicLayoutProps } from '@/types/next';
@@ -17,6 +20,10 @@ export const generateMetadata = async (props: DynamicLayoutProps) => {
17
20
  };
18
21
 
19
22
  const Page = () => {
23
+ if (authEnv.AUTH_DISABLE_EMAIL_PASSWORD) {
24
+ redirect('/signin');
25
+ }
26
+
20
27
  return <BetterAuthSignUpForm />;
21
28
  };
22
29
 
package/src/envs/app.ts CHANGED
@@ -52,7 +52,6 @@ export const getAppConfig = () => {
52
52
  INTERNAL_APP_URL: z.string().optional(),
53
53
  VERCEL_EDGE_CONFIG: z.string().optional(),
54
54
  MIDDLEWARE_REWRITE_THROUGH_LOCAL: z.boolean().optional(),
55
- ENABLE_AUTH_PROTECTION: z.boolean().optional(),
56
55
 
57
56
  CDN_USE_GLOBAL: z.boolean().optional(),
58
57
  CUSTOM_FONT_FAMILY: z.string().optional(),
@@ -107,7 +106,6 @@ export const getAppConfig = () => {
107
106
  APP_URL,
108
107
  INTERNAL_APP_URL,
109
108
  MIDDLEWARE_REWRITE_THROUGH_LOCAL: process.env.MIDDLEWARE_REWRITE_THROUGH_LOCAL === '1',
110
- ENABLE_AUTH_PROTECTION: process.env.ENABLE_AUTH_PROTECTION === '1',
111
109
 
112
110
  CUSTOM_FONT_FAMILY: process.env.CUSTOM_FONT_FAMILY,
113
111
  CUSTOM_FONT_URL: process.env.CUSTOM_FONT_URL,
package/src/envs/auth.ts CHANGED
@@ -13,6 +13,7 @@ declare global {
13
13
  AUTH_SSO_PROVIDERS?: string;
14
14
  AUTH_TRUSTED_ORIGINS?: string;
15
15
  AUTH_ALLOWED_EMAILS?: string;
16
+ AUTH_DISABLE_EMAIL_PASSWORD?: string;
16
17
 
17
18
  // ===== Auth Provider Credentials ===== //
18
19
  AUTH_GOOGLE_ID?: string;
@@ -112,6 +113,7 @@ export const getAuthConfig = () => {
112
113
  AUTH_EMAIL_VERIFICATION: z.boolean().optional().default(false),
113
114
  AUTH_ENABLE_MAGIC_LINK: z.boolean().optional().default(false),
114
115
  AUTH_ALLOWED_EMAILS: z.string().optional(),
116
+ AUTH_DISABLE_EMAIL_PASSWORD: z.boolean().optional().default(false),
115
117
 
116
118
  AUTH_GOOGLE_ID: z.string().optional(),
117
119
  AUTH_GOOGLE_SECRET: z.string().optional(),
@@ -199,6 +201,7 @@ export const getAuthConfig = () => {
199
201
  AUTH_SSO_PROVIDERS: process.env.AUTH_SSO_PROVIDERS,
200
202
  AUTH_TRUSTED_ORIGINS: process.env.AUTH_TRUSTED_ORIGINS,
201
203
  AUTH_ALLOWED_EMAILS: process.env.AUTH_ALLOWED_EMAILS,
204
+ AUTH_DISABLE_EMAIL_PASSWORD: process.env.AUTH_DISABLE_EMAIL_PASSWORD === '1',
202
205
 
203
206
  // Cognito provider specific env vars
204
207
  AUTH_COGNITO_DOMAIN: process.env.AUTH_COGNITO_DOMAIN,
@@ -107,7 +107,7 @@ export function defineConfig(customOptions: CustomBetterAuthOptions) {
107
107
 
108
108
  emailAndPassword: {
109
109
  autoSignIn: true,
110
- enabled: true,
110
+ enabled: !authEnv.AUTH_DISABLE_EMAIL_PASSWORD,
111
111
  maxPasswordLength: 64,
112
112
  minPasswordLength: 8,
113
113
  requireEmailVerification: authEnv.AUTH_EMAIL_VERIFICATION,