功能
- 登录页 / 注册页显示第三方登录按钮(位置、图标模式、标题都可在后台配置)
- 按钮与绑定页使用各平台的官方品牌图标(QQ / 微信 / 支付宝 / 钉钉 / Gitee / GitHub)
- OAuth 授权跳转 + 回调,回调带
state校验(防登录 CSRF) - 首次登录自动建号,账号与普通注册用户完全一致(同一张
users表、同样的USER角色) - 已登录用户可在「第三方账号」页绑定 / 解绑,不修改核心用户表
- 后台设置页内置接入状态卡片与「测试接口连通」按钮
安装与配置
- 把
rainbow_login/放进站点根目录的plugins/,或在后台「应用商店」安装。 - 后台「插件管理」启用插件。
- 在聚合登录的用户中心创建应用,拿到 APPID 与 APPKEY。
- 在插件设置页填写 APPID / APPKEY,把设置页显示的回调地址填到聚合登录应用的 「登录成功返回地址」。
- 按需开启登录方式,保存。
回调地址默认由站点地址推导:
| 部署方式 | 回调地址 |
|---|---|
伪静态开启(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) 链接)
- 用户可以在「个人中心」补真实邮箱并改密码,之后就能用邮箱找回密码
解绑保护:账号如果既没有可用邮箱密码、又没有其他绑定,就不允许解绑最后一个登录方式, 避免把账号锁死。
数据表
| 逻辑名 | 物理名 | 用途 |
|---|---|---|
accounts | pf_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/test | settings.manage | 后台接口连通性测试 |
安全约定
- 出站请求统一走核心
OutboundHttp:仅 http/https、拒绝内网与本机地址、强制校验证书、 限时限量,不自己拼 curl。 - 流程状态(
state、登录方式、回跳目标)存会话,10 分钟有效且一次性使用。 - 授权发起与回调按 IP 限速(5 分钟 30 次),避免匿名请求反复烧掉聚合登录的调用额度。
- 第三方返回的头像地址、跳转地址都只放行公开 http(s) 链接,
javascript:、data:一律丢弃。 - 自动建号后绑定失败会回滚刚建的账号,不留空账号。
V1.0
首个版本:登录/注册页第三方按钮、OAuth 回调与 state 校验、首次登录自动建号、账号绑定与解绑、后台接口连通性测试。
登录后参与评论
登录
还没有评论。