news 2026/9/13 15:04:16

Wekan 密码登录禁用指南:环境变量语义、源码实现与 Snap / Docker / 自托管全平台配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Wekan 密码登录禁用指南:环境变量语义、源码实现与 Snap / Docker / 自托管全平台配置

Wekan 密码登录禁用指南:环境变量语义、源码实现与 Snap / Docker / 自托管全平台配置

【免费下载链接】wekanThe Open Source kanban, built with Meteor. GitHub issues/PRs are only for FLOSS Developers, not for support, support is at https://wekan.fi/commercial-support/ . PR source translation to imports/i18n/data/en.i18n.json, other translations at https://app.transifex.com/wekan/wekan项目地址: https://gitcode.com/GitHub_Trending/we/wekan

导读

Wekan 是基于 Meteor 构建的开源看板应用,其登录界面默认同时提供用户名/密码表单与各种第三方登录按钮。在启用 LDAP、OAuth2/OIDC、CAS、SAML 等企业身份源后,通常希望隐藏密码表单,强制用户仅通过单点登录(SSO)入口进入系统。本文以 Disable-Password-Login.md 为主干,结合源码解释PASSWORD_LOGIN_ENABLED环境变量的底层实现机制,并给出 Snap、Docker、Windows On-Premise、Linux On-Premise 四种部署形态的完整配置命令与验证方法。读完本文,你将掌握如何在不影响现有账号的前提下,把 Wekan 登录页收敛为纯 SSO 登录入口。

一、功能概述:隐藏密码表单而非禁用账号

该功能的行为描述非常明确(Disable-Password-Login.md):

在登录界面不显示密码登录表单,只显示登录按钮(OAuth2、LDAP 等)。

需要注意两个关键边界:

  • 只影响登录界面的展示层:它隐藏的是.at-pwd-form(用户名 + 密码输入表单),而不是删除账号或禁止loginWithPassword能力;
  • 默认行为是"开启":只有显式把PASSWORD_LOGIN_ENABLED设为字符串'false'时密码登录才被隐藏,未设置或设为其它值时密码登录照常显示。这一"默认开启、显式关闭"的语义,避免了误配置导致所有用户被锁在系统之外。

二、源码级实现原理

2.1 服务端判定:严格的字符串比较

判定逻辑位于 server/models/settings.js:

isPasswordLoginEnabled() { return !(process.env.PASSWORD_LOGIN_ENABLED === 'false'); },

这是一个纯环境变量读取函数,没有任何数据库持久化、也没有正则解析——PASSWORD_LOGIN_ENABLED只有精确等于小写字符串'false'时才算"禁用密码登录"。因此:

  • PASSWORD_LOGIN_ENABLED=false→ 隐藏密码表单;
  • PASSWORD_LOGIN_ENABLED=true/ 未设置 / 其它任意值 → 显示密码表单。

从源码结构看,该方法作为 Meteor 方法暴露给客户端调用(同文件Meteor.methods块),供登录页在渲染阶段远程查询。

2.2 客户端渲染:先藏后显的防抖机制

登录页模板在 client/components/main/layouts.js 中处理显示逻辑,设计上有两个值得注意的点:

  1. CSS 默认隐藏.at-pwd-form.at-sep(分隔线)、.at-oauth(OAuth 按钮区)在 client/components/main/layouts.css 中统一display: none;,等待 JavaScript 异步判定后再显示;
  2. fail-open 容错:客户端调用isPasswordLoginEnabled后,只有明确收到result === false才保持隐藏;其它情况(方法报错、返回迟到)都会等待.at-pwd-form元素出现并show()出来。相关注释(Issue #6380)明确指出:只有当密码登录被显式禁用时才隐藏表单,防止网络抖动导致登录页意外丢失用户名/密码输入框。

同时,该方法与getAuthenticationsEnabled(server/models/settings.js)配合使用:后者返回ldapoauth2cassaml及各个 Meteor accounts-* 提供方(含passwordless)的启用布尔值,客户端据此为每个已启用的身份源渲染一个"Sign In with …"按钮。也就是说,登录页的最终形态是:密码表单是否可见由isPasswordLoginEnabled决定,各 SSO 按钮是否可见由getAuthenticationsEnabled决定

2.3 客户端状态同步:accounts.js 中的缓存变量

config/accounts.js 在客户端维护一个passwordLoginEnabled变量,通过Meteor.call('isPasswordLoginEnabled')异步同步服务端判定结果,供 accounts-templates 表单配置使用。这套机制同样服务于"忘记密码链接"(isDisableForgotPassword)、"注册开关"(isDisableRegistration)等同族开关,说明 Wekan 把登录页各子元素的显隐统一建模为一系列可查询的布尔状态。

三、全平台配置命令

3.1 Snap 安装

Snap 安装版通过snap set配置,键名为password-login-enabled(Snap 的配置键把环境变量名转成连字符形式):

sudo snap set wekan password-login-enabled='false'

该键的默认值、说明与映射关系定义在 snap-src/bin/config:

DESCRIPTION_PASSWORD_LOGIN_ENABLED="To hide the password login form" DEFAULT_PASSWORD_LOGIN_ENABLED="true" KEY_PASSWORD_LOGIN_ENABLED="password-login-enabled"

Snap 安装版的完整命令帮助列表位于 snap-src/bin/wekan-help,其中也包含了logout-on-minutesdefault-authentication-method等相邻登录相关配置。

3.2 Docker

Docker 部署(docker-compose 或docker run -e)使用环境变量形式,注意变量名带前缀PASSWORD_LOGIN_ENABLED,值必须是小写false

- PASSWORD_LOGIN_ENABLED=false

在 docker-compose.yml 的 wekan 服务段落中,该配置以注释形式预置(# Hide password login form/# - PASSWORD_LOGIN_ENABLED=true),取消注释并把true改为false后执行docker compose up -d即可生效。仓库中其它 compose 变体(docker-compose-mongodb-v7.yml、各 docker-compose-ferretdb-*.yml 等)以及 Dockerfile、sandstorm-pkgdef.capnp 中同样识别这一环境变量。

3.3 Windows On-Premise

Windows 本地部署(非 Docker)在start-wekan.bat中通过SET设置,配套的离线安装指引见 Windows 离线部署文档:

SET PASSWORD_LOGIN_ENABLED=false

start-wekan.bat中预置了对应的注释模板(start-wekan.bat):

REM # Enable/Disable password login form. REM SET PASSWORD_LOGIN_ENABLED=true

REM去掉、将值改为false后重新启动 Wekan 服务即可。

3.4 Linux On-Premise

Linux 本地部署在start-wekan.sh中通过export设置,树莓派等设备的部署说明见 Raspberry Pi 部署文档:

export PASSWORD_LOGIN_ENABLED=false

start-wekan.sh 中同样预留了注释模板:

# PASSWORD_LOGIN_ENABLED : Enable or not the password login form. #export PASSWORD_LOGIN_ENABLED=true

取消注释并改为false,随后重启 Wekan。该脚本同时出现在 releases/virtualbox/start-wekan.sh,VirtualBox 镜像的部署方式一致。

3.5 各部署形态参数对照

部署形态配置方式键名 / 变量名禁用取值
Snapsnap setpassword-login-enabled'false'
Docker / docker-compose环境变量PASSWORD_LOGIN_ENABLEDfalse
Windows On-PremiseSETPASSWORD_LOGIN_ENABLEDfalse
Linux On-PremiseexportPASSWORD_LOGIN_ENABLEDfalse

四、实战组合:构建"纯 SSO 登录"环境

要真正实现"登录页只剩第三方登录按钮",通常还需要配合以下开关:

  1. 启用身份源:分别配置 LDAP、OAuth2/OIDC、CAS 或 SAML 中至少一种,使其在getAuthenticationsEnabled中返回true,登录页才会出现对应按钮;
  2. 隐藏密码表单:按上文任一方式设置PASSWORD_LOGIN_ENABLED=false
  3. 可选——隐藏注册与忘记密码入口DISABLE_REGISTRATIONDISABLE_FORGOT_PASSWORD是同一套机制的同类开关(config/accounts.js 中客户端会通过isDisableRegistration/isDisableForgotPassword隐藏.at-signup-link.at-pwd-link),配合使用可进一步收敛登录页;
  4. 可选——密码无感登录:Wekan 还支持基于 Meteoraccounts-passwordless的免密码登录(见 Passwordless 登录文档),以及 HTTP Header 登录,它们与密码表单是相互独立的能力。

需要特别澄清的是:PASSWORD_LOGIN_ENABLED=false不会影响DEFAULT_AUTHENTICATION_METHOD的取值。后者(如设为ldap)只决定"新用户默认用哪种方式创建与认证",在 start-wekan.sh 的注释中明确写着"这不会移除密码登录选项"。两者职责不同:一个管登录页展示,一个管账号创建路由。

五、验证与回滚

验证方法:重启服务后打开登录页,确认不再出现"用户名 + 密码"输入框与"忘记密码"链接,仅保留已启用的 SSO 登录按钮;同时用已有密码账号直接访问受保护 URL,确认会被重定向到登录页(而非报错),因为该开关并不吊销任何既有凭据。

回滚方法:把配置值恢复为true(Snap 为password-login-enabled='true',其余为PASSWORD_LOGIN_ENABLED=true)并重启服务。由于开关完全基于环境变量且默认开启,回滚不会产生任何数据迁移成本。

六、小结

PASSWORD_LOGIN_ENABLED是 Wekan 中实现"仅 SSO 登录"的核心开关:服务端以严格字符串比较判定(server/models/settings.js),客户端以"CSS 默认隐藏 + 异步显式显示"的 fail-open 策略渲染(client/components/main/layouts.js),并在 Snap、Docker、Windows、Linux 四种部署形态下提供等价配置入口。它只影响登录界面展示,不删除账号、不影响已配置的 OAuth/LDAP/CAS/SAML 按钮,配合DEFAULT_AUTHENTICATION_METHODDISABLE_REGISTRATION等相邻开关,可以为企业环境搭建一个干净、可控的 SSO 专属登录入口。相关的进阶登录能力(如 Two-Factor-Authentication、Accounts-Lockout)可在 docs/Features/Login 目录下继续查阅。

【免费下载链接】wekanThe Open Source kanban, built with Meteor. GitHub issues/PRs are only for FLOSS Developers, not for support, support is at https://wekan.fi/commercial-support/ . PR source translation to imports/i18n/data/en.i18n.json, other translations at https://app.transifex.com/wekan/wekan项目地址: https://gitcode.com/GitHub_Trending/we/wekan

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 15:02:55

gs-quant回测引擎怎么选:两条路线的取舍、代价与决策卡

gs-quant回测引擎怎么选:两条路线的取舍、代价与决策卡 【免费下载链接】gs-quant Python toolkit for quantitative finance 项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant 一次参数扫描跑了约200秒,500组组合就是36小时——对一个…

作者头像 李华
网站建设 2026/9/13 15:02:17

MFC工程中六轴机械臂运动学正反解:C++实现与调试指南

简介:一套基于微软基础类库的运动学正反解机械臂程序,采用编程语言编写,面向机器人控制学习者和桌面软件开发人员,解决机械臂关节变量与末端位置姿态之间的换算以及界面交互控制问题。整个压缩包包含五十三个文件,体积…

作者头像 李华
网站建设 2026/9/13 15:01:40

卡尔曼滤波飞行器航迹预测跟踪:MATLAB仿真与五步递推实现

简介:基于卡尔曼滤波的飞行器航迹预测跟踪仿真资源,面向自动化、导航制导等专业的本科与硕士教研场景,可用于理解状态估计、目标跟踪及航迹预测的核心原理,并快速搭建可运行的Matlab仿真环境。压缩包共7个文件,包含6个…

作者头像 李华