官方公告 纸鱼 APP 正式版发布! 查看详情
应用商店 插件

彩虹聚合登录

接入彩虹聚合登录,让访客用 QQ、微信、支付宝、钉钉、Gitee、GitHub 账号一键登录或注册本站。

价格免费
请在系统应用商店安装 登录后收藏
最新版本1.0
PHP 兼容
最近更新2026-10-15
下载次数3
插件

功能

  • 登录页 / 注册页显示第三方登录按钮(位置、图标模式、标题都可在后台配置)
  • 按钮与绑定页使用各平台的官方品牌图标(QQ / 微信 / 支付宝 / 钉钉 / Gitee / GitHub)
  • OAuth 授权跳转 + 回调,回调带 state 校验(防登录 CSRF)
  • 首次登录自动建号,账号与普通注册用户完全一致(同一张 users 表、同样的 USER 角色)
  • 已登录用户可在「第三方账号」页绑定 / 解绑,不修改核心用户表
  • 后台设置页内置接入状态卡片与「测试接口连通」按钮

安装与配置

  1. 把 rainbow_login/ 放进站点根目录的 plugins/,或在后台「应用商店」安装。
  2. 后台「插件管理」启用插件。
  3. 在聚合登录的用户中心创建应用,拿到 APPID 与 APPKEY。
  4. 在插件设置页填写 APPID / APPKEY,把设置页显示的回调地址填到聚合登录应用的 「登录成功返回地址」。
  5. 按需开启登录方式,保存。

回调地址默认由站点地址推导:

部署方式回调地址
伪静态开启(pretty_urls = true)https://站点地址/rainbow-callback
伪静态关闭https://站点地址/index.php/rainbow-callback

两种形式都不含查询串,聚合登录回跳时追加的 ?type=..&code=.. 不会被破坏。子目录部署和 自定义域名请在设置里手填回调地址。

设置项

分组设置说明
接口配置接口地址默认 https://u.v8jisu.cn,只接受公开 http(s) 地址
接口配置APPID / APPKEY在聚合登录用户中心获取,APPKEY 仅存服务端
接口配置回调地址留空自动推导
登录方式QQ / 微信 / 支付宝 / 钉钉 / Gitee / GitHub独立开关
登录行为首次登录自动注册关闭后,未绑定的第三方账号只能提示去注册
登录行为允许已登录用户绑定关闭后隐藏绑定入口,并禁止解绑接口
登录行为强制校验 state平台不回传 state 时才需要关闭,默认开启
显示显示位置登录页 / 注册页 / 两者
显示仅显示图标按钮收成图标网格
显示按钮区标题留空则只保留分隔线

账号与数据

第三方身份存在插件自有表 pf_plugin_rainbow_login_accounts,(provider, social_uid) 是唯一键, 与本地账号一对一。核心 users 表一个字都不改。

前台「第三方账号」页只列出站点已启用的登录方式;已经绑定过、但后来被停用的方式会保留显示 (标注「该登录方式已停用」),否则用户看不到也解不掉那个绑定。

自动建号生成的账号:

  • 邮箱是合成地址(rainbow-{provider}-{hash}@rainbow.local),不可投递,也不会与真实邮箱冲突
  • 密码是随机 bcrypt 值,用户无法用密码登录
  • 昵称、头像取自第三方资料(头像只接受公开 http(s) 链接)
  • 用户可以在「个人中心」补真实邮箱并改密码,之后就能用邮箱找回密码

解绑保护:账号如果既没有可用邮箱密码、又没有其他绑定,就不允许解绑最后一个登录方式, 避免把账号锁死。

数据表

逻辑名物理名用途
accountspf_plugin_rainbow_login_accounts第三方身份 ↔ 本地用户映射

路由

方法地址权限说明
GET/rainbow-login/{type}访客发起授权,跳到第三方登录页
GET/rainbow-callback访客授权回调
GET/plugin/rainbow_login/account登录第三方账号管理页
POST/plugin/rainbow_login/unbind登录解绑
POST/admin/plugin/rainbow_login/testsettings.manage后台接口连通性测试

安全约定

  • 出站请求统一走核心 OutboundHttp:仅 http/https、拒绝内网与本机地址、强制校验证书、 限时限量,不自己拼 curl。
  • 流程状态(state、登录方式、回跳目标)存会话,10 分钟有效且一次性使用。
  • 授权发起与回调按 IP 限速(5 分钟 30 次),避免匿名请求反复烧掉聚合登录的调用额度。
  • 第三方返回的头像地址、跳转地址都只放行公开 http(s) 链接,javascript:、data: 一律丢弃。
  • 自动建号后绑定失败会回滚刚建的账号,不留空账号。