Pixiv @动物Animals
411 字
2 min
为 Casdoor 接入 Rainbow 聚合登录
最近为 Casdoor 增加了 Rainbow 聚合登录 Provider(彩虹聚合登录),支持通过 QQ、微信等 Rainbow 上游登录方式接入统一认证系统。
实现内容
后端新增 RainbowIdProvider,实现了:
- 获取 Rainbow 登录地址
- 处理回调并交换 Token
- 读取第三方用户信息
- 通过短期 state 缓存保存登录上下文,避免回调参数丢失
- 新增
/api/rainbow-login与/api/rainbow-context接口
前端新增 /callback/:state 回调路由,并在登录回调中处理 Rainbow state。Provider 配置页增加了 Rainbow 类型、子类型、默认 SVG 图标,以及自定义图标 URL 支持。
账号绑定设计
Rainbow Provider 不再把第三方 ID 写入 users 表中的固定字段,而是复用 Casdoor 的 third_party_link 表:
provider_name区分具体 Rainbow Providerprovider_id保存 Rainbow 返回的用户 ID- 同一个用户可绑定多个 Rainbow Provider
- 避免因查询不存在的
users.rainbow字段导致数据库报错
同时修复了账户页的展示逻辑:未绑定 Rainbow 时显示”绑定”按钮,不再显示空名称和”解绑”按钮。
邮箱绑定提醒
Rainbow 等部分第三方登录方式不会返回邮箱。对于通过第三方登录且邮箱为空的用户,Casdoor 自身登录流程会弹出非强制提醒:
- “立即绑定”跳转到账户页,通过邮箱验证码完成绑定
- “稍后再说”直接继续登录
该提醒不会打断外部 OAuth/OIDC 客户端的标准回调重定向。
构建与部署
已完成:
go buildyarn build- Git 提交并推送
- 发布 Docker 镜像
镜像地址:
yz303/casdoor:latest 为 Casdoor 接入 Rainbow 聚合登录
https://blog.cldery.com/posts/casdoorrainbow/