ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

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

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.jsisPasswordLoginEnabled() { return !(process.env.PASSWORD_LOGIN_ENABLED false); },这是一个纯环境变量读取函数没有任何数据库持久化、也没有正则解析——PASSWORD_LOGIN_ENABLED只有精确等于小写字符串false时才算禁用密码登录。因此PASSWORD_LOGIN_ENABLEDfalse→ 隐藏密码表单PASSWORD_LOGIN_ENABLEDtrue/ 未设置 / 其它任意值 → 显示密码表单。从源码结构看该方法作为 Meteor 方法暴露给客户端调用同文件Meteor.methods块供登录页在渲染阶段远程查询。2.2 客户端渲染先藏后显的防抖机制登录页模板在 client/components/main/layouts.js 中处理显示逻辑设计上有两个值得注意的点CSS 默认隐藏.at-pwd-form、.at-sep分隔线、.at-oauthOAuth 按钮区在 client/components/main/layouts.css 中统一display: none;等待 JavaScript 异步判定后再显示fail-open 容错客户端调用isPasswordLoginEnabled后只有明确收到result false才保持隐藏其它情况方法报错、返回迟到都会等待.at-pwd-form元素出现并show()出来。相关注释Issue #6380明确指出只有当密码登录被显式禁用时才隐藏表单防止网络抖动导致登录页意外丢失用户名/密码输入框。同时该方法与getAuthenticationsEnabledserver/models/settings.js配合使用后者返回ldap、oauth2、cas、saml及各个 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-enabledSnap 的配置键把环境变量名转成连字符形式sudo snap set wekan password-login-enabledfalse该键的默认值、说明与映射关系定义在 snap-src/bin/configDESCRIPTION_PASSWORD_LOGIN_ENABLEDTo hide the password login form DEFAULT_PASSWORD_LOGIN_ENABLEDtrue KEY_PASSWORD_LOGIN_ENABLEDpassword-login-enabledSnap 安装版的完整命令帮助列表位于 snap-src/bin/wekan-help其中也包含了logout-on-minutes、default-authentication-method等相邻登录相关配置。3.2 DockerDocker 部署docker-compose 或docker run -e使用环境变量形式注意变量名带前缀PASSWORD_LOGIN_ENABLED值必须是小写false- PASSWORD_LOGIN_ENABLEDfalse在 docker-compose.yml 的 wekan 服务段落中该配置以注释形式预置# Hide password login form/# - PASSWORD_LOGIN_ENABLEDtrue取消注释并把true改为false后执行docker compose up -d即可生效。仓库中其它 compose 变体docker-compose-mongodb-v7.yml、各 docker-compose-ferretdb-*.yml 等以及 Dockerfile、sandstorm-pkgdef.capnp 中同样识别这一环境变量。3.3 Windows On-PremiseWindows 本地部署非 Docker在start-wekan.bat中通过SET设置配套的离线安装指引见 Windows 离线部署文档SET PASSWORD_LOGIN_ENABLEDfalsestart-wekan.bat中预置了对应的注释模板start-wekan.batREM # Enable/Disable password login form. REM SET PASSWORD_LOGIN_ENABLEDtrue把REM去掉、将值改为false后重新启动 Wekan 服务即可。3.4 Linux On-PremiseLinux 本地部署在start-wekan.sh中通过export设置树莓派等设备的部署说明见 Raspberry Pi 部署文档export PASSWORD_LOGIN_ENABLEDfalsestart-wekan.sh 中同样预留了注释模板# PASSWORD_LOGIN_ENABLED : Enable or not the password login form. #export PASSWORD_LOGIN_ENABLEDtrue取消注释并改为false随后重启 Wekan。该脚本同时出现在 releases/virtualbox/start-wekan.shVirtualBox 镜像的部署方式一致。3.5 各部署形态参数对照部署形态配置方式键名 / 变量名禁用取值Snapsnap setpassword-login-enabledfalseDocker / docker-compose环境变量PASSWORD_LOGIN_ENABLEDfalseWindows On-PremiseSETPASSWORD_LOGIN_ENABLEDfalseLinux On-PremiseexportPASSWORD_LOGIN_ENABLEDfalse四、实战组合构建纯 SSO 登录环境要真正实现登录页只剩第三方登录按钮通常还需要配合以下开关启用身份源分别配置 LDAP、OAuth2/OIDC、CAS 或 SAML 中至少一种使其在getAuthenticationsEnabled中返回true登录页才会出现对应按钮隐藏密码表单按上文任一方式设置PASSWORD_LOGIN_ENABLEDfalse可选——隐藏注册与忘记密码入口DISABLE_REGISTRATION与DISABLE_FORGOT_PASSWORD是同一套机制的同类开关config/accounts.js 中客户端会通过isDisableRegistration/isDisableForgotPassword隐藏.at-signup-link与.at-pwd-link配合使用可进一步收敛登录页可选——密码无感登录Wekan 还支持基于 Meteoraccounts-passwordless的免密码登录见 Passwordless 登录文档以及 HTTP Header 登录它们与密码表单是相互独立的能力。需要特别澄清的是PASSWORD_LOGIN_ENABLEDfalse不会影响DEFAULT_AUTHENTICATION_METHOD的取值。后者如设为ldap只决定新用户默认用哪种方式创建与认证在 start-wekan.sh 的注释中明确写着这不会移除密码登录选项。两者职责不同一个管登录页展示一个管账号创建路由。五、验证与回滚验证方法重启服务后打开登录页确认不再出现用户名 密码输入框与忘记密码链接仅保留已启用的 SSO 登录按钮同时用已有密码账号直接访问受保护 URL确认会被重定向到登录页而非报错因为该开关并不吊销任何既有凭据。回滚方法把配置值恢复为trueSnap 为password-login-enabledtrue其余为PASSWORD_LOGIN_ENABLEDtrue并重启服务。由于开关完全基于环境变量且默认开启回滚不会产生任何数据迁移成本。六、小结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_METHOD、DISABLE_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),仅供参考
返回列表