资讯动态

DooTask 账号注册完全指南:开放/邀请码/关闭三种注册方式与邮箱验证全流程解析

发布时间:2026/10/16 2:52:49 来源:尧图企业网站定制
后端前端协同办公即时通讯企业应用【免费下载链接】dootaskDooTask是一款开源在线项目任务管理工具提供各类文档协作工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM文件管理等工具同时消息功能使用非对称加密技术让你的沟通更安全。项目地址https://gitcode.com/gh_mirrors/do/dootask点击查看免费下载导读本文围绕 DooTask 的用户自助注册流程展开覆盖从登录页入口、三种注册方式开放 / 邀请码 / 关闭的前端展示与后端判定到完整操作步骤、注册后自动创建个人项目与邮箱验证行为的全过程。通过本文你将掌握如何判断当前系统是否开放注册、邀请码注册的后端比对机制、api/users/reg/needinvite注册状态接口的返回语义以及注册后系统自动触发的一系列初始化动作个人项目、全员群、索引同步等。文中所有结论均可在当前开源仓库的源码、路由与测试用例中找到对应依据。注册入口DooTask 的注册入口有两个登录页底部「注册账号」链接登录页会在注册开放时显示「还没有帐号注册帐号」的切换链接点击后切换到注册表单URL 直达访问/login?typereg可直接定位到注册表单。前端登录页实现在 resources/assets/js/pages/login.vue其中loginType在reg与login之间切换注册表单会额外渲染「确认密码」「邀请码需要时」等输入项提交时向users/login接口发送type / email / password / code / code_key / invite等参数。需要特别说明的是URL 直达并不代表一定能注册。当系统注册方式为「关闭」时即使通过/login?typereg直达页面也会停留在登录表单不会展示注册 tab。注册方式三档open / invite / close注册方式由系统管理员在「系统设置 → 注册设置」中控制底层对应system.reg配置项共三档取值取值行为前端表现open开放任何人填邮箱 密码即可注册登录页显示注册入口无需邀请码invite邀请码除邮箱 密码外还必须填写正确的邀请码登录页显示注册入口且注册表单展示「邀请码」输入框close关闭完全关闭自助注册登录页隐藏注册入口直达/login?typereg也停留在登录表单仓库证据system.reg的默认值为open见种子数据 database/seeders/SettingsTableSeeder.php 中的{reg:open,project_invite:open,login_code:auto}。邀请码是什么当注册方式为invite时管理员在系统设置中配置一个字符串作为reg_invite只有一个全局值所有想注册的人共用同一个邀请码不限次数、不过期邀请码不区分用户、不限制使用次数、也没有有效期严格比对注册时后端将提交的Request.invite与配置的setting.reg_invite做直接比对不通过则直接拒绝且没有「错几次锁定」之类的限制。注意区分这里的「邀请码」是系统级开放注册的密钥与「邀请同事加入项目」完全是两回事。前者决定能否成为 DooTask 用户账号级别后者是成为用户后加入某个项目项目级别。系统管理员是注册阶段的守门人项目负责人是项目阶段的守门人。更完整的说明见 注册是否需要邀请码。后端判定逻辑源码级注册判定实现在 app/Http/Controllers/Api/UsersController.php 的login()方法中注册分支if ($type reg) { if (mb_strlen($email) 32 || mb_strlen($password) 32) { return Base::retError(账号密码最多可输入32位字符); } $setting Base::setting(system); if ($setting[reg] close) { return Base::retError(未开放注册); } elseif ($setting[reg] invite) { $invite trim(Request::input(invite)); if (empty($invite) || $invite ! $setting[reg_invite]) { return Base::retError(请输入正确的邀请码); } } $user User::reg($email, $password); ... }由此可以确认几个关键行为close模式下直接调用注册接口会返回「未开放注册」invite模式下邀请码为空或不匹配都会返回「请输入正确的邀请码」邮箱、密码任一超过 32 个字符按mb_strlen多字节长度计都会返回「账号密码最多可输入32位字符」。注册状态判定接口api/users/reg/needinvite前端在进入登录页时会先调用GET api/users/reg/needinvite来判断是否显示注册入口以及是否展示邀请码输入框。该接口的实现位于 app/Http/Controllers/Api/UsersController.php 的reg__needinvite()方法public function reg__needinvite() { $reg Base::settingFind(system, reg, open); return Base::retSuccess(success, [ enabled $reg ! close, need $reg invite, ]); }返回的 JSON 数据包含两个布尔字段语义如下字段取值含义前端行为enabledfalseregclose关闭注册隐藏注册入口即使/login?typereg直达也停留在登录表单enabledtrueregopen或reginvite显示注册入口needtruereginvite注册表单显示「邀请码」输入框needfalseregopen或regclose以enabled为准前端逻辑位于 resources/assets/js/pages/login.vue 的refreshRegistrationSetting()方法调用users/reg/needinvite后用data.need设置needInvite是否显示邀请码框用data.enabled设置registrationAvailable是否显示注册入口兼容旧版本只返回need字段的情况。该接口在路由表中登记为「注册状态」见 routes/api-map.md。这一行为还有自动化测试保障测试文件 tests/Feature/RegistrationAvailabilityTest.php 分别验证了regclose时接口返回enabledfalse, needfalse以及reginvite时返回enabledtrue, needtrue可作为回归验证参考。注册操作步骤以 Web 端为例完整注册流程如下进入登录页/login点击「注册帐号」切换到注册 tab或直接访问/login?typereg输入邮箱要求是合法邮箱地址长度不超过 32 个字符输入密码长度 632 个字符且需满足管理员配置的密码策略确认密码与密码保持一致若注册方式为invite在「邀请码」输入框填写管理员下发的全局邀请码点击提交等待注册结果。密码策略说明源码级密码校验实现在 app/Models/User.php 的passwordPolicy()方法中密码长度不得小于 6 位否则报「密码设置不能小于6位数」密码长度不得超过 32 位否则报「密码最多只能设置32位数」当系统开启复杂密码策略system.password_policy complex时还有额外约束不能是纯数字、不能是纯字母、不能是纯数字大写字母、不能是纯数字小写字母即必须包含数字、字母大小写或特殊字符的组合。注册后行为注册成功后DooTask 会自动执行一系列初始化动作本节结合源码逐一说明。1. 自动创建「个人项目」注册或登录成功后会为没有个人项目的用户自动创建一个「 个人项目」实现位于 app/Http/Controllers/Api/UsersController.phpif (!Project::withTrashed()-whereUserid($user-userid)-wherePersonal(1)-exists()) { Project::createProject([ name . Doo::translate(个人项目), desc Doo::translate(注册时系统自动创建项目你可以自由删除。), personal 1, ], $user-userid); }要点每个用户最多只有 1 个个人项目重复创建会返回「个人项目已存在无须重复创建」见 app/Models/Project.php 的createProject()个人项目由系统自动创建不受项目创建权限限制注册失败或注册后未登录的情况下个人项目会在登录成功时补建。2. 邮箱验证可选开启若管理员开启了「注册需邮箱验证」emailSetting.reg_verify open注册接口会走验证分支if ($isRegVerify) { UserEmailVerification::userEmailSend($user); return Base::retError(注册成功请验证邮箱后登录, [code email]); }此时注册不会直接登录成功而是返回提示「注册成功请验证邮箱后登录」并附带code: email标记同时向用户邮箱发送一封验证邮件。前端收到该标记后会切回登录表单见 resources/assets/js/pages/login.vue 中data.code email的处理分支。验证邮件的发送逻辑在 app/Models/UserEmailVerification.php 的userEmailSend()方法中生成一个 64 位随机 code邮件中的验证链接形如single/valid/email?code...链接 30 分钟内有效、且一次性使用。验证流程的完整说明见 邮箱验证。3. 注册数据初始化与后置动作User::reg()方法app/Models/User.php在账号创建后还会执行设置az昵称首字母与pinyin昵称拼音用于检索排序记录注册 IPcreated_ip若管理员配置了注册临时身份reg_identity temp给新用户打上temp身份若开启了全员群自动加入all_group_autoin yes默认开启自动将新用户拉入全员群组WebSocketDialog的all群触发 Manticore 索引同步ManticoreSyncTask(user_sync, ...)保证新用户可被全局搜索命中触发user_onboard钩子Apps::dispatchUserHook供应用市场应用在新用户注册时执行 onboarding 流程。4. 未开启邮箱验证时当emailSetting.reg_verify未开启时注册成功后直接返回 token前端调用handleClearCache完成登录态写入并跳转到工作台manage-dashboard即「注册即登录」。注册校验链路从接口到账号落库完整的一条注册请求其服务端调用链可以概括为POST/GET api/users/login (typereg) └─ UsersController::login() // 长度、reg 模式、邀请码校验 └─ User::reg() // 邮箱格式、查重、密码策略、license 校验 └─ Doo::userCreate() // 底层账号创建经 DooSo 接口层其中User::reg()内部的核心校验顺序如下app/Models/User.php邮箱格式Base::isEmail($email)不通过则抛「请输入正确的邮箱地址」邮箱查重已存在同邮箱账号时返回「邮箱地址已存在」若该账号此前注册过但未验证邮箱且当前开启了邮箱验证则会重新发送验证邮件并提示「您的帐号已注册过请验证邮箱」密码策略passwordPolicy()见上文License 校验Doo::licenseBindingError(Doo::license())商业授权受限时会阻止注册账号创建Doo::userCreate()经 app/Module/Interface/DooSo.php 的接口层落库并处理事务边界。常见错误提示与含义对照提示文案触发条件处理建议未开放注册system.reg close直接调用注册接口联系管理员手动创建账号或让管理员开放注册请输入正确的邀请码reginvite且邀请码为空或不匹配向管理员确认正确的全局邀请码账号密码最多可输入32位字符邮箱或密码超过 32 字符缩短输入请输入正确的邮箱地址邮箱格式非法检查邮箱拼写邮箱地址已存在该邮箱已注册直接去登录若提示验证邮箱先完成邮箱验证密码设置不能小于6位数 / 密码最多只能设置32位数密码长度不满足 632调整密码长度密码不能全是数字/字母…开启复杂密码策略后密码太简单使用数字、字母大小写、特殊字符的组合注册的边界与限制不支持用户名注册账号必须是邮箱没有单独的「用户名」注册方式不支持第三方账号微信/手机号直接注册扫码登录、SSO 是登录方式而非注册方式注册阶段的守门机制仍以邮箱 系统注册方式为准注册 ≠ 登录开启邮箱验证时注册后必须先完成邮箱验证才能登录验证链接 30 分钟内有效、一次性使用过期或使用过后需重新触发邮件重新注册或登录触发见 邮箱验证注册关闭时的替代路径regclose时所有人无法自助注册此时只能由管理员在后台手动创建账号管理员创建账号复用同一套注册逻辑并支持强制首登改密、指定部门与职位见User::createByAdmin()。管理员侧配置入口系统管理员userIsAdmin调整注册方式与邀请码的路径为「系统设置」→「注册设置」→ 切换reg模式open / invite / close或修改reg_invite字符串。修改即时生效无需重启服务。因为注册判定每次请求都会实时读取system设置通过Base::settingFind(system, reg, open)读取不存在缓存延迟这也是为什么前端每次进入登录页都会重新调用reg/needinvite的原因。小结DooTask 的注册体系由「系统设置驱动的三档模式 前置状态接口 后端多重校验 注册后自动初始化」四层构成前端通过api/users/reg/needinvite动态渲染注册入口与邀请码输入框后端在api/users/logintypereg中对长度、注册开关、邀请码、邮箱格式与查重、密码策略、license 逐层把关注册成功后自动创建个人项目、可选触发邮箱验证、加入全员群并同步搜索索引。理解这套链路无论是普通用户完成注册、管理员开放/关闭自助注册还是开发者接入注册相关流程都能有的放矢。赞分享后端前端协同办公即时通讯企业应用【免费下载链接】dootaskDooTask是一款开源在线项目任务管理工具提供各类文档协作工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM文件管理等工具同时消息功能使用非对称加密技术让你的沟通更安全。项目地址https://gitcode.com/gh_mirrors/do/dootask点击查看免费下载相关推荐注册策略设置DooTask 开放注册、邀请码与临时帐号配置全解析注册策略设置DooTask 开放注册、邀请码与临时帐号配置全解析 本文基于仓库内 resources/ai kb/zh/howto/system settin后端前端协同办公即时通讯企业应用DooTask 注册邀请码机制全解system.reg 三档注册策略与 api/users/reg/needinvite 前端判定DooTask 注册邀请码机制全解 system.reg 三档注册策略与 api/users/reg/needinvite 前端判定 本篇技术指南围绕 Doo后端前端协同办公即时通讯企业应用DooTask 邮箱验证机制全解析从注册触发、邮件投递到链接校验的完整流程DooTask 邮箱验证机制全解析从注册触发、邮件投递到链接校验的完整流程 本文基于 DooTask 官方知识库「邮箱验证」文档 https://link.g后端前端协同办公即时通讯企业应用上一篇Angular Material Tabs 测试 Harness 完全指南深入解析 angular/material/tabs/testing API下一篇ESLint no-var 规则详解用 let 与 const 全面取代 var创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑