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 Provider
  • provider_id 保存 Rainbow 返回的用户 ID
  • 同一个用户可绑定多个 Rainbow Provider
  • 避免因查询不存在的 users.rainbow 字段导致数据库报错

同时修复了账户页的展示逻辑:未绑定 Rainbow 时显示”绑定”按钮,不再显示空名称和”解绑”按钮。

邮箱绑定提醒#

Rainbow 等部分第三方登录方式不会返回邮箱。对于通过第三方登录且邮箱为空的用户,Casdoor 自身登录流程会弹出非强制提醒:

  • “立即绑定”跳转到账户页,通过邮箱验证码完成绑定
  • “稍后再说”直接继续登录

该提醒不会打断外部 OAuth/OIDC 客户端的标准回调重定向。

构建与部署#

已完成:

  • go build
  • yarn build
  • Git 提交并推送
  • 发布 Docker 镜像

镜像地址:

yz303/casdoor:latest
为 Casdoor 接入 Rainbow 聚合登录
https://blog.cldery.com/posts/casdoorrainbow/
作者
Cloudery
发布于
2026-07-22
License
CC BY-NC-SA 4.0