需求背景
近期在原有后台账号密码登录功能基础上,增加了飞书三方登录功能,主要解决两个问题:
- 方便经常忘记密码的同事快速登录系统
- 新同事入职时可通过飞书自动创建账号,只需上级分配权限即可
- 同事离职后,无需手动禁用账号,通过飞书权限控制自然拦截
飞书三方登录实现
流程图解

详细流程参考 飞书官方文档
实现特点
创建企业自建应用 后,在安全设置中配置重定向地址即可使用,甚至支持 https://localhost:6120
本地测试,这与其他三方登录平台相比更加便捷。
用户信息处理方案
- 获取用户唯一ID作为账号
- 密码设置为随机数
- 沿用原有创建新账号流程
老用户绑定方案思考
最初考虑最小化变动,但在流程设计中发现问题。最终采用 登录与绑定分离 的方案:
- 登录是登录流程 ,绑定是绑定流程
- 增加专门入口供老用户绑定飞书账号
- 数据库增加
third_party_id
字段存储用户唯一ID - 登录时优先查询
third_party_id
字段
移动端兼容性问题与解决方案
问题发现
第一版方案:
登录页A点击飞书登录 → 打开B页面 → 完成登录 → 通过 window.opener.postMessage 通知父页面 → 关闭当前页 → A页面提示登录成功
PC端正常,但移动端出现跨源问题。
解决方案
javascript
function listenEvent(event) {
// 安全检查:验证消息来源(兼容http和https)
const currentOrigin = window.location.origin;
const eventOrigin = event.origin;
// 检查是否为同域不同协议的情况
const isSameDomain = eventOrigin.replace(/^https?:/, '') === currentOrigin.replace(/^https?:/, '');
if (!isSameDomain) {
console.warn('收到来自不受信任域名的消息:', event.origin);
return;
}
handleThirdLoginResult(event.data);
}
同时增加 BroadcastChannel
通信作为兜底方案。
iOS Safari特殊处理
针对 iOS Safari 不支持 window.open
方法的问题,采用 localStorage
存储源页面地址,登录完成后跳转回原页面。
行业变化与AI发展思考
Cursor
等AI编码助手已经达到高级前端工程师水平,能够:
- 🚀 快速解决积累的技术问题
- 💡 提供优质的技术方案
- 🌐 扩大技术视野,提高开发下限
这种变化意味着:
- ⚖️ 技术门槛降低,技术垄断被打破
- 🔥 行业竞争加剧,用工成本下降
- 📚 开发者需要更加关注自身健康 与持续学习能力
健康 > 心态 > 赚钱 ------ 这才是技术人员应当坚持的价值排序。