BlessingSkin Server 6 插件,通过 IP 或学工号校验用户在校状态。
- 用户在侧边栏「在校认证」页面主动进行在校认证
- IP 认证:页面自动检测用户当前 IP 是否在校园网段内
- 在校园网内 → 按钮可点击,点击后认证为在校用户
- 不在校园网内 → 按钮灰色不可点击,并提示可通过 SSLVPN 连接校园网
- 学工号认证:通过华东理工大学学工号邮箱自动验证在校身份
@mail.ecust.edu.cn学生邮箱:8 位学号(本科生)或 Y + 8 位学号(研究生)@ecust.edu.cn教职工邮箱:5 位数字工号- 本科生:毕业日期(入学年+4 的 6 月 30 日)未过方可通过
- 研究生:毕业日期(入学年+2 的 6 月 30 日)未过方可通过(默认按两年学制,其他请通过 IP 验证)
- 教职工:直接通过
- 有效期智能计算:学工号认证时,有效期取「正常有效期」和「毕业年 6 月 30 日」中的较早者,避免临近毕业的学生获得超出在校时间的有效期
- 认证有效期默认 365 天,可在管理后台调整
- 有效期过期后需重新认证续期
- 管理后台可查看所有用户的在校状态统计和详细列表(含过期时间、认证方式)
- 管理后台支持按状态筛选用户(在校 / 已过期 / 未认证)
- 支持同时配置 IPv4 和 IPv6 CIDR 网段,也支持直接填写单个 IP 地址
- 认证福利:管理员可在后台配置 Markdown 格式的福利信息,展示在认证页面右侧
- 注册自动认证:用户通过 BlessingSkin 原生注册时,若邮箱符合学工号规则将自动认证
- 一键批量验证:管理后台提供一键验证按钮,对未认证用户批量进行学工号认证
- 插件联动接口:提供
AutoVerifier::verify()静态方法供其他插件调用
- 登录后,在侧边栏点击「在校认证」
- 页面会自动检测当前网络环境和学工号身份
- 认证方式二选一:
- IP 认证:如果处于校园网内,点击「认证为在校用户」按钮;不在校内时可通过 SSLVPN 连接后认证
- 学工号认证:如果邮箱符合学工号要求,点击「通过学工号认证」按钮
- 已认证用户可点击续期刷新有效期
- 页面右侧展示管理员配置的认证福利信息
在插件配置页面可以:
- 校园网 IP 段:每行填写一个 CIDR 或单个 IP 地址,支持 IPv4 和 IPv6 混合,例如:
10.0.0.0/8 172.16.0.0/12 192.168.1.100 2001:da8::/32 ::1直接填写 IP 地址时,IPv4 自动视为
/32,IPv6 自动视为/128,即仅匹配该地址本身。 - 有效期(天):在校认证的有效天数,默认 365
- 认证福利:使用 Markdown 语法编写福利信息,展示在用户认证页面右侧。留空则不显示福利版块。
- 查看在校/已过期/未认证用户统计
- 查看用户在校状态详细列表(含认证时间、过期时间、认证IP/方式)
- 按状态快速筛选用户(全部 / 在校 / 已过期 / 未认证)
- 一键学工号验证:对未认证用户批量进行学工号邮箱验证,仅符合规则的会被自动认证
| 配置键 | 默认值 | 说明 |
|---|---|---|
campus_status_cidr_ranges |
(空) | 校园网 IP 段,每行一个 CIDR 或 IP 地址 |
campus_status_validity_days |
365 |
在校状态有效天数 |
campus_status_benefits |
(空) | 认证福利,Markdown 格式,留空不显示 |
插件启用时会自动创建 campus_status_records 表:
| 字段 | 类型 | 说明 |
|---|---|---|
uid |
INT UNSIGNED (主键) |
用户 UID |
ip |
VARCHAR(45) (可空) |
认证IP/方式 |
verified_at |
TIMESTAMP (可空) |
认证时间 |
expires_at |
TIMESTAMP (可空) |
过期时间 |
- 用户首次认证时插入记录,再次认证时更新
ip、verified_at和expires_at - 在校状态是否有效通过
expires_at > 当前时间判断 ip字段同时记录认证方式:实际 IP 地址表示 IP 认证,email表示学工号认证,manual表示管理员手动认证
- 新安装:插件启用时自动创建包含
expires_at列的完整表 - 旧版升级:
bootstrap.php首次请求时检测expires_at列是否存在,缺失时自动添加并根据已有verified_at回填过期时间,完成后缓存标记不再重复执行
系统通过用户注册邮箱的域名和本地部分自动判断学工号类型:
| 邮箱域名 | 本地部分格式 | 身份类型 | 年限校验 |
|---|---|---|---|
@mail.ecust.edu.cn |
8 位纯数字(前两位为入学年份) | 本科生 | 毕业日期(入学年+4 的 6 月 30 日)未过 |
@mail.ecust.edu.cn |
Y/y + 8 位数字(第3-4位为入学年份) | 研究生 | 毕业日期(入学年+2 的 6 月 30 日)未过 |
@ecust.edu.cn |
5 位纯数字 | 教职工 | 无需年限校验,直接通过 |
研究生默认按两年学制计算在校年限,其他学制请通过 IP 验证,请谅解。
- IP 认证 / 手动认证:有效期 = 认证时间 + 有效天数
- 学工号认证:有效期 = min(认证时间 + 有效天数, 毕业年 6 月 30 日 23:59:59)
举例:2022 级本科生在 2026 年 5 月通过学工号认证(有效期 365 天):
- 正常有效期 → 2027-05-28
- 毕业日期 → 2026-06-30 23:59:59
- 实际有效期 → 2026-06-30 23:59:59
用户通过 BlessingSkin 原生注册流程注册时,若邮箱符合学工号规则,将自动完成在校认证。
本插件提供 CampusStatus\Services\AutoVerifier 类供其他插件调用:
use CampusStatus\Services\AutoVerifier;
// 通过学工号邮箱验证用户,返回 bool
AutoVerifier::verify(int $uid, string $email): bool;
// 通过 IP 地址验证用户,返回 bool
AutoVerifier::verifyByIp(int $uid, string $ip): bool;建议使用前先检查类是否存在:
if (class_exists(\CampusStatus\Services\AutoVerifier::class)) {
$autoVerifier = \CampusStatus\Services\AutoVerifier::class;
// 单独使用:学工号认证
$autoVerifier::verify($user->uid, $user->email);
// 单独使用:IP 认证
$autoVerifier::verifyByIp($user->uid, $userIp);
// 组合使用:注册时双通道认证,任一通过即标记在校
$ipResult = $autoVerifier::verifyByIp($user->uid, $userIp);
$emailResult = $autoVerifier::verify($user->uid, $user->email);
if ($ipResult || $emailResult) {
// 用户已通过在校认证
}
}例如 auth-ecust 插件可在后台开启「注册时自动学工号认证」,在用户首次注册时自动调用本接口。
插件优先读取 EO-Connecting-IP 请求头(腾讯云 EdgeOne CDN 传递的真实客户端 IP),如果该头不存在则回退到 request()->ip()。
将 campus-status 目录放入 BlessingSkin 的 plugins/ 目录下,然后在管理后台启用插件即可。
- BlessingSkin Server >= 6.0
- PHP >= 8.0