
在日常开发与运营中,长链接分享既不美观也不便于追踪。于是我在 s.rmzdb.cloud 域名下从零搭建了一套短链接服务,支持用户注册登录、短链生成管理、VIP 会员、二维码生成等功能。并在近期完成了三项重磅扩展 + 双平台 OAuth 接入。
接入 GitCode(CSDN 旗下代码托管平台)OAuth 2.0 授权登录,实现管理员和普通用户双重场景。
https.request() 必须从顶层 const https = require('https') 引用,闭包内动态引用会导致 TLS 握手失败oauth_states 表持久化/oauth/token 要求 Content-Type: application/x-www-form-urlencoded,而非 JSONs.rmzdb.site 的通配代理将前端请求发到后端 API,返回空 [] JSON,修复后恢复正常// 通过 oauth_states 表的 target_type 自动路由 admin/user
app.get('/api/gitcode/callback', (req, res) => {
const { code, state } = req.query;
db.get('SELECT * FROM oauth_states WHERE state=?', [state], (err, row) => {
const isUser = row.target_type === 'user';
// token 交换 → 用户信息 → 创建/绑定账号 → 生成 session
});
});在同一天接入 Gitee(码云)OAuth,与 GitCode 并列共存,用户登录弹窗底部同时展示两个平台按钮。
平台 | 回调地址 | Token 格式 | 用户信息端点 |
|---|---|---|---|
GitCode | /api/gitcode/callback | form-urlencoded | api.gitcode.com/api/v5/user |
Gitee | /api/gitee/callback | JSON | gitee.com/api/v5/user |
s.rmzdb.cloud/api/gitee/callbackwindow.opener.postMessage({type:'gitee_login',...}) 向父窗口传递 sessionoauth_states 表新增 provider 列区分 gitcode / gitee敏感链接需要加锁,访问时输入密码才能跳转。
s.rmzdb.cloud/A1b2C3/p/A1b2C3(自包含 HTML 密码中间页)/api/verify-password返回目标 URL 前端跳转 /
提示"密码错误"
crypto.createHash('sha256') 存储,不存明文所有关键操作记录到 audit_logs 表,管理员可在后台实时查看。
操作 | 记录内容 |
|---|---|
创建/编辑/删除链接 | 操作人、短码、目标 URL、IP |
VIP 订单审核 | 操作人、订单 ID、套餐、操作结果 |
删除用户/链接(管理员) | 操作人、目标、IP |
自定义域名设置 | 操作人、域名、IP |
管理后台新增「审计日志」面板,按时间倒序展示,动作标签自动着色:删除=红、驳回=黄、通过=绿。
全部 46 个 emoji 图标替换为 Lucide 风格 inline SVG,零外部依赖。
<!-- Before: emoji -->
<span> 短链接</span>
<!-- After: inline SVG -->
<svg width="14" height="14" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2">
<path d="M10 13a5 5 0 0 0 7.54.54l3-3..."/>
</svg>
短链接优势:像素级可控、任何设备渲染一致、不依赖系统 emoji 字体。
问题 | 根因 | 解决 |
|---|---|---|
GitCode grant_type 为空 | 闭包内 https 引用丢失 | 提升到顶层 require |
State 重启丢失 | 存 JavaScript 对象内存中 | 改存 SQLite 表 |
Gitee 回调 404 | 回调地址写错路径 | 改为 /api/gitee/callback |
Nginx 502 | PHP 8.3 FPM 不存在 | 改为 php8.4-fpm.sock |
REST API 被拦截 | EdgeOne Bot 防护 | --resolve 直连源站 |
postMessage 未触发 | 只监听了 gitcode_login | 新增 gitee_login 事件 |
访问 https://s.rmzdb.cloud/ 体验完整功能:
这篇分享记录了从零到一的完整开发过程,希望能给同样在做短链接服务或 OAuth 集成的朋友一些参考。
本文为作者原创,未经授权禁止转载、洗稿、搬运。如需引用请保留原文链接。